我有一个大约5万个样本的数据集,它包含2个特征,其中第一个是二进制特征,第二个是连续特征。
我想使用python来使用聚类方法来创建2个类别。
PS :我无法指定何时严格限制第一个类别以制定规则。我需要有一个大多数数字= 0的类别,即我的目标是在我的数据中必须删除一部分。它的col_A值大部分为0,我需要删除它们,但我不知道它们的限制位置
我的数据如下:
id Col_A Col_B
1 0 2
2 0 3
3 1 25
4 0 17
5 0 9
6 1 30
7 1 1
8 1 12
9 1 3
10 0 6
我想得到2个簇
第一类是关于包含少量数字的行,并且Col_A值的大多数为0。
,第二个类别应包含更大的数字,而不管Col_A的值如何。
类别1必须具有:
id Col_A Col_B
1 0 2
2 0 3
5 0 9
7 1 1
9 1 3
10 0 6
和类别2必须具有:
id Col_A Col_B
3 1 25
4 0 17
6 1 30
8 1 12
如何将第一类必须以0的多数作为Col_A的值强加给聚类算法
我已经使用了以下代码,但是它不能正常工作。
from sklearn.cluster import KMeans
import numpy as np
data = np.array([[0, 2], [0, 3], [1, 25],[0, 17], [0, 9], [1, 30], [1, 1],[1, 12], [1, 3], [0, 6]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(data)
kmeans.labels_
df = pd.DataFrame(data)
df['categories'] = kmeans.labels_
我遇到了诸如“ 18”这样的问题,必须将其归类为第2类。
Col_A Col_B Category
0 2 Cat_1
0 3 Cat_1
1 12 Cat_2
0 17 Cat_2
0 9 Cat_1
1 30 Cat_2
1 1 Cat_1
1 18 Cat_1
0 3 Cat_1
0 6 Cat_1
当我处理真实数据时,即使用大量样本时,我得到错误的分类。我该如何解决这种情况
答案 0 :(得分:0)
首先,如果您的聚类依赖于列B并且您知道边界是什么,那么听起来好像不需要无监督算法,并且如果column_ B
如果您仍想使用无监督的聚类算法,请尝试重新缩放列。与其对列进行标准化(通常的方法)(在算法中使所有列具有相同的“重要性”),不如将列B中的所有数字乘以某个因子(比方说乘以10),然后再次进行聚类。这将使B列更加“重要”。
答案 1 :(得分:0)
Kmeans是一种无监督的学习算法,不能保证找到全局最优值。
在这种情况下,为什么不使用熊猫并按条件分配组。
df = pd.DataFrame(data)
df1 = df[df.column2 > x]
df2 = df[df.column2 <= x]