Как я могу применить кластеризацию по условию в Python - PullRequest
1 голос
/ 16 мая 2019

У меня есть набор данных о 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 кластера

  • первая категория о строках, которые содержат небольшие числа, и большинство значений 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

Когда я работаю над своими реальными данными, то есть с массивной выборкойЯ ошибаюсь в классификации.Как я могу исправить эту ситуацию

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Kmeans - это неконтролируемый алгоритм обучения, который не гарантирует нахождение глобального оптимума.

Почему бы не использовать панд и не назначать группы по условиям для этого случая.

df = pd.DataFrame(data)
df1 = df[df.column2 > x]
df2 = df[df.column2 <= x]
0 голосов
/ 16 мая 2019

Во-первых, если ваша кластеризация зависит от столбца B, и вы знаете, что такое граница, то, похоже, нет необходимости в алгоритме без контроля, и вы можете назначить метку 0, если column_ B border.

Если вы все еще хотите использовать алгоритм кластеризации без контроля, попробуйте изменить масштаб столбцов. Вместо того, чтобы стандартизировать столбцы (обычный подход), который придает всем столбцам одинаковую «важность» в алгоритме, умножьте все числа в столбце B на некоторый коэффициент (скажем, на 10) и снова кластеризуйте. Это сделает столбец B более «важным».

...