私は、私のデータセットのクラスター構造を悪用することを目指すプロジェクトに取り組んでいます。 Iはscikit-leanrのK-means法の実装を使用して自分のデータをクラスタ化するために、次のコード、X
を使用する:無作為に各クラスターのx%をサンプリングします
k = KMeans(n_clusters=(i+2), precompute_distances=True,).fit(X)
df = pd.DataFrame({'cluster' : k.labels_, 'percentage posotive' : y})
a = df.groupby('cluster').apply(lambda cluster:cluster.sum()/cluster.count())
2つのクラスが(0で示される)は、正(1で表される)と負であり、中に格納されています配列y
。 このコードは最初にX
をクラスタリングし、データフレームに各クラスタ番号とその中の肯定的なインスタンスの割合の数を格納します。
ここで、15%のサンプリングをするまで、各クラスタからランダムにポイントを選択します。これどうやってするの?
ここで要求されたように、テストデータセットを含む簡略化されたスクリプトです:
from sklearn.cluster import KMeans
import pandas as pd
X = [[1,2], [2,5], [1,2], [3,3], [1,2], [7,3], [1,1], [2,19], [1,11], [54,3], [78,2], [74,36]]
y = [0,0,0,0,0,0,0,0,0,1,0,0]
k = KMeans(n_clusters=(4), precompute_distances=True,).fit(X)
df = pd.DataFrame({'cluster' : k.labels_, 'percentage posotive' : y})
a = df.groupby('cluster').apply(lambda cluster:cluster.sum()/cluster.count())
print(a)
注:実際のデータセットデータ・インスタンスの機能と、数千、数千からなるはるかに大きいです。 @SandipanDeyに対応して
:
私はあまりあなたを伝えることはできませんが、基本的に我々は非常にアンバランスなデータセット(1:10,000)を扱っていると我々は少数クラスの例を識別にのみ関心があります要求されたラベルの数を減らしながらリコール> 95%である。 (リコールは医療に関連するものほど高くする必要があります)
少数派の例は一緒に集まり、肯定的な例を含むクラスタには通常少なくとも%%が含まれるため、x%をサンプリングすることによって、正のインスタンスを持つクラスタ。そのため、潜在的なポジティブなデータセットのサイズをすばやく減らすことができます。この胸像データセットは、アクティブな学習に使用できます。我々のアプローチは緩く私が正しくあなたを理解している場合、次のコードは、目的を果たす必要がある'Hierarchical Sampling for Active Learning'
あなたは1と負の関係にあるとは思わないと思います。とにかく、これを行うための(小さな)サンプルデータセットを投稿しますか? – Denziloe
@Denziloe良いキャッチ、それに応じて編集しました。すぐに小さなテストデータセットを追加します。 – scutnex
@Denziloeテストデータセットを追加しました。 – scutnex