web-dev-qa-db-ja.com

pandas sklearn kでのデータフレームオブジェクトの動作はクラスタリングを意味しますか?

データセットはpandas dataframe。これはsklearn.cluster.KMeansです

 km = KMeans(n_clusters = n_Clusters)

 km.fit(dataset)

 prediction = km.predict(dataset)

これは、どのエンティティがどのクラスターに属するかを判断する方法です。

 for i in range(len(prediction)):
     cluster_fit_dict[dataset.index[i]] = prediction[i]

これは、データセットの外観です。

 A 1 2 3 4 5 6
 B 2 3 4 5 6 7
 C 1 4 2 7 8 1
 ...

ここで、A、B、Cはインデックスです

これはk-meansを使用する正しい方法ですか?

29
Dark Knight

データフレームdatasetに適切なコンテンツがあるかどうかを知るために、numpy配列に明示的に変換できます。

dataset_array = dataset.values
print(dataset_array.dtype)
print(dataset_array)

配列に同種の数値dtype(通常numpy.float64)がある場合、scikit-learn 0.15.2以降では問題ありません。たとえば、sklearn.preprocessing.StandardScalerを使用してデータを正規化する必要がある場合があります。

データフレームの型が異なる場合、対応するnumpy配列のdtypeobjectになりますが、これはscikit-learnには適していません。関連するすべてのフィーチャの数値表現を抽出し(たとえば、カテゴリフィーチャのダミー変数を抽出するなど)、適切なフィーチャではない列(サンプル識別子など)を削除する必要があります。

16
ogrisel

データフレーム内のすべての値が数値であると仮定すると、

# Convert DataFrame to matrix
mat = dataset.values
# Using sklearn
km = sklearn.cluster.KMeans(n_clusters=5)
km.fit(mat)
# Get cluster assignment labels
labels = km.labels_
# Format results as a DataFrame
results = pandas.DataFrame([dataset.index,labels]).T

または、 KMandas for Pandas を試すこともできます。

27
user666