Как сделать прогноз KMeans более точным? - PullRequest
0 голосов
/ 04 марта 2019

Я изучаю кластеризацию и KMeans и тому подобное, поэтому мои знания очень просты в этой теме.То, что я имею ниже, - это самостоятельное изучение того, как это работает.По сути, если в одном из столбцов отображается «а», «двоичный» будет равен 1. По сути, я пытаюсь научить его шаблону.Я узнал следующее из учебника, используя набор данных Titanic, но я адаптировался к своим собственным данным.

import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import MinMaxScaler
import seaborn as sns
import matplotlib.pyplot as plt

мои построенные данные

dataset = [
    [0,'x','f','g'],[1,'a','c','b'],[1,'d','k','a'],[0,'y','v','w'],
    [0,'q','w','e'],[1,'c','a','l'],[0,'t','x','j'],[1,'w','o','a'],
    [0,'z','m','n'],[1,'z','x','a'],[0,'f','g','h'],[1,'h','a','c'],
    [1,'a','r','e'],[0,'g','c','c']     
]

df = pd.DataFrame(dataset, columns=['Binary','Col1','Col2','Col3'])
df.head()

df:

Binary  Col1  Col2  Col3
------------------------
  1       a    b     c
  0       x    t     v
  0       s    q     w
  1       n    m     a
  1       u    a     r

Кодирование недвоичного в двоичный:

labelEncoder = LabelEncoder()
labelEncoder.fit(df['Col1'])
df['Col1'] = labelEncoder.transform(df['Col1'])

labelEncoder.fit(df['Col2'])
df['Col2'] = labelEncoder.transform(df['Col2'])

labelEncoder.fit(df['Col3'])
df['Col3'] = labelEncoder.transform(df['Col3'])

Установить кластеры в два, потому что это либо 1, либо 0?

X = np.array(df.drop(['Binary'], 1).astype(float))
y = np.array(df['Binary'])
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)

Проверить это:

correct = 0
for i in range(len(X)):
    predict_me = np.array(X[i].astype(float))
    predict_me = predict_me.reshape(-1, len(predict_me))
    prediction = kmeans.predict(predict_me)
    if prediction[0] == y[i]:
        correct += 1

Результат:

print(f'{round(correct/len(X) * 100)}% Accuracy')
>>> 71%

Как я могу получить более точное значение, чтобы он на 99,99% знал, что двоичный столбец "a" означает 1?Больше данных?

1 Ответ

0 голосов
/ 04 марта 2019

K-означает, что даже не пытается предсказать это значение.Потому что это неконтролируемый метод.Потому что это не алгоритм прогнозирования;это задача открытия структуры.Не путайте кластеризацию с классификацией.

Номера кластеров не имеют значения.Они 0 и 1, потому что это первые два целых числа.К-среднее рандомизировано.Запустите его несколько раз, и вы также получите иногда только 29%.

Кроме того, k-means предназначен для непрерывного ввода.Вы можете применить его к двоичным кодированным данным, но результаты будут довольно плохими.

...