我有一个大约 50 000 个样本的数据集,它包含 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 个集群
类别 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
当我处理真实数据时,即使用大量样本时,我得到了错误的分类。我该如何解决这种情况
首先,如果您的聚类依赖于 B 列并且您知道边界是什么,那么听起来似乎不需要无监督算法,并且如果 column_ B < 边界则可以分配标签 0,如果 column_B > 边界则可以分配标签 1。
如果您仍想使用无监督聚类算法,请尝试重新缩放列。不要对列进行标准化(通常的方法),这会在算法中赋予所有列相同的“重要性”,而是将 B 列中的所有数字乘以某个因子(假设乘以 10),然后再次聚类。这将使 B 列更加“重要”。
我是一名优秀的程序员,十分优秀!