提问者:小点点

是否可以在Python中的KMeans中对非浮点数据进行集群(Scikit Learn)?


我已经看到了足够多的例子,其中Float64值显示在集群中。我想知道的是,是否可以在列df[[Description]]上进行聚类,将x轴和y轴作为经度和纬度。

我的代码看起来像这样。

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
from sklearn.preprocessing import LabelEncoder
import pandas as pd
matplotlib.style.use('ggplot')

df = pd.read_csv('df.csv')

encoder =LabelEncoder()
Longitude = encoder.fit_transform(df.Longitude)
Latitude= df[df.columns[19]].values #(latitude)

x=np.array([Longitude, Latitude]).T

est = KMeans(3)

est.fit(df[['Longitude', 'Latitude', 'Description']])

但我在这条线上遇到的错误是

---------------------------------------------------------------------------()中的ValueError回溯(最近一次调用)----

C:\用户\magiri\appdata\本地\程序\python\python35-32\lib\site-包\skLearning\集群\k_means_。

C:\用户\magiri\appdata\本地\程序\python\python35-32\lib\site-包\skLearning\集群\k_means_. py在_check_fit_data(自我,X)852 def_check_fit_data(自我,X): 853"""验证给出的样本数大于k""-

c:\users\magiri\appdata\local\programs\python\python35-32\lib\site packages\sklearn\utils\validation。检查数组中的py(数组、接受稀疏、数据类型、顺序、复制、强制所有有限、确保2d、允许nd、确保最小样本、确保最小特征、警告数据类型、估计器)380强制所有有限)381其他:--

ValueError:无法将字符串转换为浮动:“游戏/骰子”

所以,我想知道的是df。描述参考经度和纬度的群集。我知道Description列有字符串值,这就是我得到错误的原因。无论如何,我都可以避免这个错误,并且可以看到描述列的集群。


共2个答案

匿名用户

K-均值算法只适用于数值数据。您可以将LabelEncoder应用到您的“描述”字段,将其转换为类id。

同样,将LabelEncoder应用于经度/延迟也不是最佳的,因为这样你就失去了两点在一起有多近的概念。相反,您应该在K-均值之前对数据应用一个Standard Scaler,以标准化不同字段的相对权重。

匿名用户

我已经成功地使用kmodes和kprototypes对分类数据进行了聚类。这里有一个python实现:https://github.com/nicodv/kmodes.Kmodes允许对分类数据进行聚类,而kprototypes可以对分类数据和数字数据进行聚类(kmeans和Kmodes的混合)。github页面中的示例用法

import numpy as np
from kmodes.kmodes import KModes

# random categorical data
data = np.random.choice(20, (100, 10))

km = KModes(n_clusters=4, init='Huang', n_init=5, verbose=1)

clusters = km.fit_predict(data)

# Print the cluster centroids
print(km.cluster_centroids_)

Kmodes只是基于点之间的公共类别进行聚类。kprototypes距离度量的简化摘要如下

distance = np.sum((a_num - b_num) ** 2) + gamma * np.sum(a_cat != b_cat)

其中,a_numb_num是两点的数值,a_catb_cat是分类值gamma是分类差异成本与数字距离的权重。默认值为数字特征标准偏差的一半(=0.5,如果事先对数字特征进行归一化)。