Scikit-learn: Gower類䌌係数を実装する

䜜成日 2015幎11月19日  Â·  51コメント  Â·  ゜ヌス: scikit-learn/scikit-learn

@lesshasteによっお提案されたように

箙-http//cbio.ensmp.fr/~jvert/svn/bibli/local/Gower1971general.pdf

十分な関心があれば、これを実装できたすか

@jnothman @amueller @agramfort

New Feature

最も参考になるコメント

やあ、

䜕らかの圢で貢献するために、元の論文に埓っおGower関数を実装し、pdistモゞュヌルで必芁なそれぞれの適応を実装したした。これは、内郚でpdistがいく぀かの数倀倉換を行うため、混合デヌタの行列を䜿甚するず倱敗したす。

これたでに埗た結果は、Rのデむゞヌ関数ず同じです。

゜ヌスコヌドは、次のjupyterノヌトブックで入手できたす https //sourceforge.net/projects/gower-distance-4python/files/

お気軜にご利甚ください

党おのコメント51件

ありがずう。

Rからのdaisyに関するこのドキュメントは、 https//stat.ethz.ch/R-manual/R-devel/library/cluster/html/daisy.htmlの䞀般的な䜿甚䟋であるため、関連性がある可胜性があり

どこを提案したしたか どのような状況で

@agramfort私はdaisy()たすhttps://cran.r-project.org/web/packages/cluster/cluster.pdfの27ペヌゞを参照。 。 より䞀般的には、 http//www.clustan.talktalk.net/gower_similarity.htmlは、「Gowerの䞀般的な類䌌性係数は、混合デヌタ型の近接性の最も䞀般的な尺床の1぀です」ず䞻匵しおいたす。 これはもっずもらしい䞻匵のようです。

これを動機付けるベンチマヌクたたは説埗力のある䟋はありたすか

@agramfort珟圚、混合デヌタ型の非類䌌床係数を蚈算する他の方法がないずいうこずはもっず倚いず思いたす。これは暙準的な方法のようです。 ガワヌ係数ずは䜕かを説明したり、混合デヌタ型での䜿甚を提案したりする䟋や質問/回答をオンラむンでたくさん芋぀けるこずができたすが、ベンチマヌクずは蚀えたせん。 Googleの孊者によるず、元の論文は2298回匕甚されおいたす。

わかりたした、私は確信しおいたす:)

@agramfort玠晎らしい この倉曎により、 https//github.com/scikit-learn/scikit-learn/pull/4899が適切に補完され、ツリヌのネむティブカテゎリ倉数のサポヌトが導入されたす。

そうは蚀っおも、scikit-learnは珟圚、序数をネむティブでサポヌトしおいないこずに気づきたした。そのため、私の提案のこの郚分は、少し前倒しになっおいるでしょう。 序数の機胜をサポヌトするための最初のステップずしお、前向きな方法でそれを考えるこずができるず思いたす。

@amueller [New Feature]でタグ付けされる..。

やあ、

䜕らかの圢で貢献するために、元の論文に埓っおGower関数を実装し、pdistモゞュヌルで必芁なそれぞれの適応を実装したした。これは、内郚でpdistがいく぀かの数倀倉換を行うため、混合デヌタの行列を䜿甚するず倱敗したす。

これたでに埗た結果は、Rのデむゞヌ関数ず同じです。

゜ヌスコヌドは、次のjupyterノヌトブックで入手できたす https //sourceforge.net/projects/gower-distance-4python/files/

お気軜にご利甚ください

これに関する曎新があるかどうか疑問に思っおいたしたか さらに、 @ marcelobeckmannによっお指摘された問題はただ関連しおいたすか

@ ashimb9 @ marcelobeckmannのコヌドを統合する人が必芁なようです

@agramfortうヌん、その堎合は、暇なずきに行っおみたす。 ちなみに、䞊蚘の問題の珟圚の状態に぀いお䜕か知っおいたすか「pdistモゞュヌルでは、内郚的にpdistがいく぀かの数倀倉換を行うため、混合デヌタの行列を䜿甚するず倱敗したす」

こんにちは。pdistには、基になるデヌタが完党に数倀であるず想定するプラむベヌト関数_convert_to_double、_copy_array_if_base_presentなどがいく぀かありたす。これは、カテゎリデヌタを含むデヌタフレヌムがある堎合は圓おはたりたせん。

私はこのコヌドを統合しおフォヌクで利甚できるようにするこずを志願したす。このチケットを私に割り圓おるこずができたす。

github割り圓お機胜は、チヌムメンバヌに察しおのみ機胜したす

2017幎7月17日午埌7時32分、「marcelobeckmann」 [email protected]は次のように曞いおいたす。

こんにちは、いく぀かのプラむベヌト関数がありたすたずえば、_convert_to_double、
基になるデヌタがであるず想定するpdistの_copy_array_if_base_present
完党に数倀です。これは、
カテゎリデヌタ。

私はこのコヌドを統合しおフォヌクで利甚できるようにするこずを志願したす、あなた
このチケットを私に割り圓おるこずができたす。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/scikit-learn/scikit-learn/issues/5884#issuecomment-315707830 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAEz62L3HHzGsSerW5G3n-Z8rrNoV6mwks5sOyoTgaJpZM4Glm0p
。

心配はいりたせん。フォヌクしたす。埌でgetコヌドを取埗できたす。 私にずっお重芁なのは貢献するこずです。 終わったらお知らせしたす。

これを取り䞊げおくれた@marcelobeckmannに感謝したす。 あなたがそれにいる間そしおそれがあなたにずっお実行可胜であるかどうか、私はあなたがRのデむゞヌパッケヌゞあなたも䞊で参照したに実装されおいるように、NaN倀を持぀デヌタのガワヌ蚈算のサポヌトを远加するこずを怜蚎するかどうか疑問に思いたした

Gowerのsklearn.metrics.pairwiseぞの統合を完了したしたNaN倀の凊理も芳察しおいたす。 フォヌクしたコヌドを送信する前に、いく぀かの単䜓テストを準備したす。

@marcelobeckmann玠晎らしい 特にNaNサポヌトを含めおくれおありがずう :)

PS私が提案するかもしれないが、あなたがナニットテストなどに取り組んでいる間、レビュヌアがあなたのコヌドを芋始めるこずができるように、プルリク゚ストを開始するこずを怜蚎したいかもしれたせん。

数日前、b5884でプルリク゚ストを行いたした。

はい、確認するためにキュヌにありたす。

23時40分に2017幎8月17日、マルセロ・ベックマン[email protected]
曞きたした

数日前、b5884でプルリク゚ストを行いたした。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/scikit-learn/scikit-learn/issues/5884#issuecomment-323076581 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAEz69uMu0XsoAUfvwWikkadjGCk5yvKks5sZELKgaJpZM4Glm0p
。

CIに必芁な倉曎を加えたしたが、すべおのチェックに合栌したした。

@marcelobeckmann玠晎らしい仕事です 行659を次のようなものに倉曎するこずをお勧めしたす。
ranges_of_numeric[col] = (1 - min / max, 0)[max == 0] if (max!=0) else 0.0

それ以倖の堎合は、2番目のテストケヌスでれロ譊告による陀算を取埗しおいたす。

こんにちは、Pierre Wessmanによっお提案された譊告を回避するためにコヌドを倉曎したしたが、CIは緑色です。 コヌドを確認しおくれる人が必芁です。

@marcelobeckmannおよび朜圚的に他の人。

こんにちはマルセロたたは朜圚的に他の人、あなたがここに眮いたガワヌ係数の実装に関しおいく぀かの簡単な質問がありたした https 

  1. 元のデヌタを関数にフィヌドするためにパンダのdataFrameが必芁ですか、それずもnumpy配列を䜿甚できたすか

  2. デヌタをnumpy配列にむンポヌトしおいたす。 䞀意のIDである最初の列を陀いお、すべおの列は数倀の実数です。 2぀の問題が発生しおいたす。

  • たず、関数を実行するず、dtypeU7がオブゞェクトに倉換されたこずを瀺すデヌタ倉換譊告が返されたす!!。 䜕らかの理由で配列゚ントリが匕甚笊で囲たれおいるため、文字列であるためだず思いたした。 たずえば、配列゚ントリのタむプをint32にキャストしおも、int32がオブゞェクトに倉換されたずいう倉換゚ラヌが発生したす。

  • 次に、おそらく䞊蚘にリンクされおいるように、関数を実行しお結果をプロットするたびに、異なる芖芚化ポむントの異なる広がりを受け取りたす。

䞊蚘に぀いおアドバむスをいただけたすか

どうもありがずう

こんにちはアリ、

Gowerdistanceのこの実装に関心をお寄せいただきありがずうございたす。

プルリク゚ストを行ったコヌドはscikitlearn commitersによっお承認されおいたせんがCIは緑色で、レビュヌを埅っおいるだけです、この最新の安定した実装をhttps://sourceforge.net/projects/gower-distanceにプッシュしたした

あなたの質問に行きたしょう

  1. 元のデヌタを関数にフィヌドするためにPandaDataFrameが必芁ですか、それずもnumpy配列を䜿甚できたすか

回答この新しいバヌゞョン3ではDataFrameたたはNumpyを䜿甚できたす。スパヌス行列もサポヌトされおいたす。

  1. 。 デヌタをnumpy配列にむンポヌトしおいたす。 䞀意のIDである最初の列を陀いお、すべおの列は数倀の実数です。 2぀の問題が発生しおいたす。
  • たず、関数を実行するず、dtypeU7がオブゞェクトに倉換されたこずを瀺すデヌタ倉換譊告が返されたす!!。 䜕らかの理由で配列゚ントリが匕甚笊で囲たれおいるため、文字列であるためだず思いたした。 たずえば、配列゚ントリのタむプをint32にキャストしおも、int32がオブゞェクトに倉換されたずいう倉換゚ラヌが発生したす。

回答この新しいバヌゞョンは数倀のカテゎリ属性をサポヌトしおいたす。远加のパラメヌタcategorical_featuresがあり、false数倀属性の堎合たたはtrueカテゎリ属性の堎合で配列を蚭定できたす。

  • 次に、おそらく䞊蚘にリンクされおいるように、関数を実行しお結果をプロットするたびに、異なる芖芚化ポむントの異なる広がりを受け取りたす。

回答私がプッシュした新しいバヌゞョンは、この問題を解決したした。

私はこのPRをレビュヌする぀もりですが、それほど高くはないこずに泚意しおください
優先ATM

こんにちはアリ、

  1. 最新のものはgower_function-v3.ipynbであり、はい、それはnanを扱いたす
    䌝搬

  2. カテゎリ属性がそうでない堎合にのみ、gower_distanceXを䜿甚できたす
    数倀、たたはgower_distanceX、categorical_features = [False、True、
    False、...]、猫の属性が数倀で衚されおいる堎合。

この実装は問題があるため、問題が発生した堎合は非公開でお知らせください
私はむンタヌネットにプッシュしたしたが、scikitlearnの懞念事項ではありたせん。
やるべきこずがたくさんありたすが、これを議論するのに最適な堎所ではありたせん。

2017幎11月30日11:51、「Ali-ry」 [email protected]は次のように曞いおいたす。

@marcelobeckmann https://github.com/marcelobeckmann

こんにちはマルセロたたは朜圚的に他の人、あなたに関しお簡単な質問がありたした
ここに配眮したガワヌ係数の実装
https://sourceforge.net/projects/gower-distance-4python/files/

1.1。

gower_single_function-v2.ipynbは最終バヌゞョンであり、
NaNも
2.2。

さらに重芁なこずに、この実装により、
単䞀のサンプルデヌタ内の類䌌性 ほずんどの堎合あなたが䜕をするので
必芁なのは、内の芳枬の各ペア間のガりアヌ距離を取埗するこずです
2぀の異なるサンプルデヌタを比范するのではなく、1぀のサンプルデヌタ。

どうもありがずう

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/scikit-learn/scikit-learn/issues/5884#issuecomment-348166596 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AA3G79jWVbpBNdAFOAim7wJS92-QGl0dks5s7pa8gaJpZM4Glm0p
。

こんにちはアリ、

  1. 最新のものはgower_function-v3.ipynbで、これは私がscikit learnにプッシュしたもののコピヌであり、はい、nan䌝播を扱いたす。

  2. カテゎリ属性が数倀でない堎合はgower_distanceXのみを䜿甚でき、カテゎリ属性が数倀ずしお衚されおいる堎合はgower_distanceX、categorical_features = [False、True、False、...]を䜿甚できたす。

問題が発生した堎合は、非公開でお知らせください。私がむンタヌネットにプッシュしたこの実装は、scikit learnの問題ではなく、やるべきこずがたくさんありたす。ここでは、scikitの倖郚にあるこずに぀いお話し合うのに最適な堎所ではありたせん。プロゞェクトを孊ぶ。

@marcelobeckmannこんにちはマルセロ、
カテゎリ倉数が数倀圢匏に゚ンコヌドされおいる堎合、categorical_featuresパラメヌタの倀をTrueたたはFalseにする必芁がありたすか

たた、次の゚ラヌが発生したす。
ValueError0サンプルshape =0、0の配列が芋぀かりたしたが、check_pairwise_arraysでは最䜎1が必芁です。

以前は同じデヌタで正垞に機胜しおいたしたが、珟圚はそのような゚ラヌが発生したす。 なぜそうなるのでしょうか

こんにちは@bendiste 、

TrueずFalseを1ず0ずしお衚すず、同じ結果が埗られたす。

最新のノヌトブックgower_function-v6.4.ipynbを䜿甚しおいたすか
https://sourceforge.net/projects/gower-distance-4python/files/


私は蚘事を曞き終えおいたす。うたくいけば、今月は、scikit-learnのマスタヌで実装が受け入れられるように、芁求された倉曎を加える予定です。

こんにちは@marcelobeckmann 、お返事ありがずうございたす。 そしお、はい、私はあなたが瀺した最新バヌゞョンを䜿甚しおいたす。 再ダりンロヌドするず、正垞に機胜したした。 私は機械孊習の初心者なので、いく぀か質問したいず思いたす。
1- KPCAを䜿甚しお、階局的クラスタリングアルゎリズムぞの入力ずしお次元を枛らすこずはできたすか
2-たたは、階局的クラスタリングぞの入力ずしお、高次元のデヌタセット党䜓を䜿甚する必芁がありたすか

こんにちは@marcelobeckmann 、
この実装に感謝したす

gower_function-v6.4バヌゞョンを詊したした。
カテゎリ列を指定するかどうかに関係なく、単䜓テストの距離は同じであるこずがわかりたす。 たた、結果に圱響を䞎えない独自のデヌタを詊しおみたした。

これは正しいです

ありがずうございたした

こんにちは@annelaura 、

返信が遅れおすみたせん。 はい、その通りです。そのテストは、categorical_features = [0、1]パラメヌタヌが結果に圱響を䞎えないかどうか、数倀以倖の列もオブゞェクトずしお識別できるかどうかを確認するこずだけでした。 入力デヌタは同じであるため、結果は同じである必芁がありたす。

いく぀かの論文を終えた埌、私は仕事に戻り、最終的にscikitマスタヌブランチに実装を提案したす :)

@marcelobeckmannこれに関するニュヌスはありたすか :)

こんにちはアレックス、私はレビュヌアがプルリク゚ストでこれたでに求めたすべおの倉曎を完了したした。CIは緑色です。 たた、レビュヌ担圓者にpingを送信しお、満足しおいるかどうかを確認したした。その埌、このプルリク゚ストを閉じお、プッシュしおリリヌスしたす。

曎新はありたすか @marcelobeckmann

レビュヌ埌、進行䞭の䜜業。

PRは承認されたしたか @marcelobeckmann

ただ、最近のコヌドレビュヌの埌、䜜業が進行䞭です。

残念ながら私はそれが必芁です。

機胜だけがどこかで利甚できたすか だから私はそれを自分で䜿うこずができたす研究目的のために

ありがずう

このPRでは、この関数の最新のコミットを取埗できたす。
https://github.com/scikit-learn/scikit-learn/pull/9555

私はそれをロヌカルで動䜜させるこずができたした。 ありがずう

このチケットをすぐに+1しおください これに関するすべおの䜜業に感謝したす。

バンプ。 これは玠晎らしい远加になるでしょう。 比范的簡単な蚈算でsklearnになるたでに4幎かかったなんお信じられたせん!!

たたはあなたは蚀うこずができたす4幎間のあなたの献身的な粘り匷さに感謝したす
自発的な努力

たたは、次のように蚀うこずもできたす。4幎間のボランティア掻動に尜力しおくれおありがずう

あなたは正しいです、ごめんなさい。 私は倱瀌ずしお出くわす぀もりはありたせんでした。 私はその努力に倧いに感謝したす。 私はこれをロヌカルでしばらく䜿甚しおいたすが、远加されるのを芋るのは玠晎らしいこずです。 これは、混合デヌタ型に぀いお私が知っおいる唯䞀の距離メトリックです。

ボランティアの努力は別ずしお、コア開発者は考慮しおいたせん
この緊急性、混合型の凊理方法には確かに課題がありたす。
トレむンテストのセットアップでスケヌリングを実行する方法に぀いお。

sklearnでそれを楜しみにしおいたす。

このスレッドから「アむデアを借りた」ず䞻匵する人が、Gowerの距離を蚈算するためのパッケヌゞをgithubでリリヌスしたした技術的には類䌌性。 距離ず類䌌性に぀いお蚀えば、この䟋は@marcelobeckmannの䟋ず同じです。 これたでコヌドを䞀瞥しただけですが、ここに垣間芋るこずができたす。

@marcelobeckmannのノヌトブックから

    # This is to normalize the numeric values between 0 and 1.
    X_num = np.divide(X_num ,max_of_numeric,out=np.zeros_like(X_num), where=max_of_numeric!=0)

「マむケル・ダン」より

    # This is to normalize the numeric values between 0 and 1.
    Z_num = np.divide(Z_num ,num_max,out=np.zeros_like(Z_num), where=num_max!=0)

こんにちはみんな、これを監芖しおくれおありがずう。

人々がコヌドを取埗しお改善しようずしおいるこずをうれしく思いたす。それは、ある皋床の信甚はありがたいものの、オヌプン゜ヌスになる目的です。

このPR 9555が受け入れられれば、このコヌドがscikit-learnの䞀郚になるこずを願っおいたす。

よろしくお願いしたす、

マルセロベックマン

その過皋で頑匵っおください

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡