データセットは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を使用する正しい方法ですか?
データフレーム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配列のdtype
はobject
になりますが、これはscikit-learnには適していません。関連するすべてのフィーチャの数値表現を抽出し(たとえば、カテゴリフィーチャのダミー変数を抽出するなど)、適切なフィーチャではない列(サンプル識別子など)を削除する必要があります。
データフレーム内のすべての値が数値であると仮定すると、
# 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 を試すこともできます。