Python 功能列包含列表-如何解析为k-means算法

Python 功能列包含列表-如何解析为k-means算法,python,pandas,numpy,scikit-learn,k-means,Python,Pandas,Numpy,Scikit Learn,K Means,我正在尝试将数据解析为sklearn.cluster.KMeans。下面是一个显示我的数据的示例: import sklearn.cluster import numpy as np d = {'ID' : pd.Series([1, 2, 1]), 'X1' : pd.Series([111, 222, 333]), 'X2' : pd.Series([[0,1], [1,2], [2,4]]), 'X3' : pd.Series([111, 222, 333

我正在尝试将数据解析为sklearn.cluster.KMeans。下面是一个显示我的数据的示例:

import sklearn.cluster
import numpy as np

d = {'ID' : pd.Series([1, 2, 1]), 
     'X1' : pd.Series([111, 222, 333]),
     'X2' : pd.Series([[0,1], [1,2], [2,4]]),
     'X3' : pd.Series([111, 222, 333])
    }

df1 = (pd.DataFrame(d))

labels = []
for index, row in df1.iterrows():
    labels.append(row['ID'])

print(df1)

   ID   X1  X2      X3
0   1  111  [0, 1]  111
1   2  222  [1, 2]  222
2   1  333  [2, 4]  333

print(labels)

[1, 2, 1]
这就是我试图将数据提取到要素中的方式:

features = np.array([x[1:] for x in df1])
clust_centers = 2
model = sklearn.cluster.k_means(features, clust_centers)
这将返回以下错误:

ValueError: could not convert string to float: D
问题:

如何使用此数据格式作为k-means的输入

    ID X1   X2      X3
0   1  111  [0, 1]  111
1   2  222  [1, 2]  222
2   1  333  [2, 4]  333
这种格式怎么样?这可以用作输入吗

    ID X1   X2          X3
0   1  111  [0:3, 1:4]  111
1   2  222  [1:2, 2:3]  222
2   1  333  [2:2, 4:2]  333
编辑-有关要素类型的详细信息

该数据集是比特币交易网络的摘录

标签:

id(int)-这是一个160位的散列。i、 e.我已转换为整数id值的比特币地址

特点:

数字的

价值(浮动):交易中发送或接收的比特币金额

页面排名(浮动):事务的页面排名

度数(浮动):事务中节点的度数

出度(浮动):事务中节点的出度

分类的

列表中的标记(int):标记表示六个类别(赌博、服务、金融等)之一,可以表示为字符串或整数。我正在聚合标记,因此使用列表表示

样本行


行ID PAGERANK IN_DEGREE OUT \u标记中的度数值
767 7504 1.500 2 1 0.0012[1,2][1,5]

这里的目标是预测新用户可能与之交互的类别


非常感谢

查看
打印(功能)
的输出。您将每个列名中除第一个字符外的所有字符作为您的特性,我认为您不打算这样做。我想您需要的是
features=df1.values[:,1::
。当你尝试进行聚类时,这仍然会给你一个错误,但这是一个错误,因为在你的数据中有一个列表,这正是你的问题想要得到的。你的权利,这不是我打算做的。我想我要找的是
id
作为标签(我有)的列表,然后为k-means输入生成
样本x特征
矩阵我假设这是k-均值的正确输入。均值仅适用于欧几里德距离。
X2
中元素之间的距离是多少?
X2
特征是分类值。我已将标记转换为整数表示,这意味着您为它们指定了任意数字。这并不能让他们得到真实的数字。您仍然无法计算它们之间的欧几里德距离。请查看
打印(功能)
的输出。您将每个列名中除第一个字符外的所有字符作为您的特性,我认为您不打算这样做。我想您需要的是
features=df1.values[:,1::
。当你尝试进行聚类时,这仍然会给你一个错误,但这是一个错误,因为在你的数据中有一个列表,这正是你的问题想要得到的。你的权利,这不是我打算做的。我想我要找的是
id
作为标签(我有)的列表,然后为k-means输入生成
样本x特征
矩阵我假设这是k-均值的正确输入。均值仅适用于欧几里德距离。
X2
中元素之间的距离是多少?
X2
特征是分类值。我已将标记转换为整数表示,这意味着您为它们指定了任意数字。这并不能让他们得到真实的数字。您仍然无法计算它们之间的欧几里德距离。