Python 使用K-Means基于不同时间的不同读数对节点进行聚类
我想根据一个数据集对节点进行聚类,该数据集包含每个节点在不同时间的不同读数 以下是我的数据示例:Python 使用K-Means基于不同时间的不同读数对节点进行聚类,python,matlab,machine-learning,cluster-analysis,k-means,Python,Matlab,Machine Learning,Cluster Analysis,K Means,我想根据一个数据集对节点进行聚类,该数据集包含每个节点在不同时间的不同读数 以下是我的数据示例: 1.0000 21.0860 46.1968 2.3000 2.3568 1.0000 21.0762 46.0326 0.9200 2.3568 1.0000 21.0664 45.9669 0.9200 2.3568 2.0000 89.5488 29.2581 11.9600 1.9537 2.0000 19.5
1.0000 21.0860 46.1968 2.3000 2.3568
1.0000 21.0762 46.0326 0.9200 2.3568
1.0000 21.0664 45.9669 0.9200 2.3568
2.0000 89.5488 29.2581 11.9600 1.9537
2.0000 19.5670 39.6878 121.4400 2.6753
2.0000 19.5376 39.7557 121.4400 2.6753
2.0000 19.4788 39.6878 121.4400 2.6633
其中,第一列中的1表示节点1的数据,2表示与节点2相关的数据
当节点1的所有数据点落在同一个集群中时,如何强制K-Means对数据进行集群,以此类推
注意目标是集群节点,而不是数据
这是我在Matlab中的代码,在这里我没有考虑节点标签并简单地聚集了实际上不需要的数据:
filename='data.txt';
delimiterIn='';
headerlinesIn=1;
A=导入数据(文件名,分隔符);
数据=A.数据;
DATA_REAL=A.DATA(1:n,3:end);
温度=实际数据(:,1);
湿度=实际数据(:,2);
光=数据实值(:,3);
电压=实际数据(:,4);
%%二维
%2D%%的K-均值算法
[KM_R2,C_R2,sumd_R2,D_R2]=MY_KMEANS(DATA_REAL(:,1:2),K);
图形
绘图(温度、湿度、r.)
等等
网格化
_簇中的节点_=0(1,K);
对于j=1:K
_簇中的节点_(j)=长度(查找(KM_R2==j));
结束
对于i=1:长度(数据_实值)
文本(温度(i)、湿度(i)、num2str(KM_R2(i))、‘背景色’、cc(KM_R2(i),:);
结束
标题([“K-means中的簇数:”,num2str(K)])
xlabel(‘温度’)
ylabel(‘湿度’)
我建议您浏览Python的SciKit包教程。这有很多很好的ML工具,包括K-Means和形心函数。NumPy将帮助您根据数据建立一个好的矩阵,并根据您的喜好对其进行操作
一般来说,你会想
有一种叫做不确定k-均值的变体,你可以试试
理论上,假设每个节点的所有不同读数的可能性相同(也可以使用权重)。然后你为每个节点画一个随机读数来测量距离,并经常重复这个过程(理论上,我相信,如果你无限频繁地这样做,这些方法会直接计算出声音发生了什么)。这样,您就可以像常规的k-means一样对节点进行集群。它是Python还是MATLAB?请出示你的密码。如果数据上已经有了标签,那么为什么还要对数据进行集群呢?此外,截图也没有什么帮助。从截图中复制和粘贴数据非常困难。我通过删除截图来编辑问题。虽然我有数据标签,但我想对节点进行聚类,因为有将近100个节点,我想有将近5个集群。在节点之间需要什么权重?有20个数据点的节点是否比只有三个数据点的节点更重要?如果没有,那么您的第一个任务是预处理数据,用其质心替换每个节点。然后简单地聚集质心。另外,将节点编号更改为字符串,并将该列从距离公式中删除。@删减否权重不重要。我的想法和你解释的一样。然而,我正在寻找任何其他的想法或算法,可以做自己的一切。我的意思是找到一个标签的质心,然后对节点进行聚类。