web-dev-qa-db-ja.com

K-scikit-learnで特定のデータフレーム列のみを使用することを意味します

k-meansライブラリのscikit-learnアルゴリズムを使用しており、クラスター化する値はpandasデータフレームに3列あります:IDvalue_1およびvalue_2

value_1value_2を使用して情報をクラスター化したいが、IDを関連付けたままにしておきたい(IDsのリストを作成できるようにするため)各クラスター)。

これを行うための最良の方法は何ですか?現在、ID番号も使用してクラスター化されていますが、これは意図されたものではありません。

私の現在のコード(Xはpandasデータフレーム)です:

kmeans = KMeans(n_clusters=2, n_init=3, max_iter=3000, random_state=1)
(X_train, X_test) = train_test_split(X[['value_1','value_2']],test_size=0.30)
kmeans = kmeans.fit(X_train)
7

(例のように)対象の列のみを使用してクラスタリングを実行します。次に、ラベルのリストkmeans.labels_を別の列としてX_train(またはX_test)に追加します。ラベルは元の行と同じ順序です。

# A toy DF
X = pd.DataFrame({'id': [1,2,3,4,5],
                  'value_1': [1,3,1,4,5],
                  'value_2': [0,0,1,5,0]})

# Split ALL columns
(X_train, X_test) = train_test_split(X,test_size=0.30)
# Cluster using SOME columns
kmeans = kmeans.fit(X_train[['value_1','value_2']])
# Save the labels
X_train.loc[:,'labels'] = kmeans.labels_

X_trainX_testsはどちらもXのスライスであるため、ここに警告が表示される場合があります。

DataFrameからのスライスのコピーに値を設定しようとしています。

あなたはそれを無視することができます。

X_train
#   id  value_1  value_2  labels
#4   5        5        0       0
#0   1        1        0       0
#3   4        4        5       1
7
DYZ