Как получить среднее значение кластера для данных на основе условия? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть CSV-файл, который содержит значения даты и mse (среднеквадратичная ошибка), показанные ниже.

date                       mse                                                  
2018-02-11                 14.34
2018-02-12                 7.24
2018-02-13                 4.5
2018-02-14                 3.5
2018-02-16                 12.67
2018-02-21                 45.66
2018-02-22                 15.33
2018-02-24                 98.44
2018-02-26                 23.55
2018-02-27                 45.12
2018-02-28                 78.44
2018-03-01                 34.11
2018-03-05                 23.33
2018-03-06                 7.45
...                        ...

Теперь я хочу получить два кластера для значений mse, меньших определенного предела, скажем 40 , чтобы я знал, какие значения лежат в каком кластере и их среднее значение.

Теперь для этого обычно нужны два параметра или набор значений. Так как я просто обеспокоен значениями mse и кластером вокруг него, я передаю другой параметр как диапазон значений одинакового размера. Это то, что я сделал

from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

df = pd.read_csv("mse_test.csv", parse_dates=["date"])

# get mse values lesser than 40
f1 = df[df['mse'] < 40].values
# get another list of equal size
f2 = list(range(0, 32))  # 32 is no of mse values below 40
X = np.array(list(zip(f1, f2)))
kmeans = KMeans(n_clusters=2).fit(X)

labels = kmeans.predict(X)
# Centroid values
centroids = kmeans.cluster_centers_

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(X[:, 0], X[:, 1], c=labels)
ax.scatter(centroids[:, 0], centroids[:, 1], marker='*', c='#050505', s=1000)
plt.title('K Mean Classification')
plt.show()

Но я получаю сообщение об ошибке, как показано ниже

Traceback (most recent call last):
  File "/home/souvik/PycharmProjects/Pandas/test.py", line 21, in <module>
    kmeans = KMeans(n_clusters=2).fit(X)
  File "/home/souvik/app/lib/python3.5/site-packages/sklearn/cluster/k_means_.py", line 887, in fit
    X = self._check_fit_data(X)
  File "/home/souvik/app/lib/python3.5/site-packages/sklearn/cluster/k_means_.py", line 858, in _check_fit_data
    X = check_array(X, accept_sparse='csr', dtype=[np.float64, np.float32])
  File "/home/souvik/app/lib/python3.5/site-packages/sklearn/utils/validation.py", line 433, in check_array
    array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: setting an array element with a sequence.

Что я делаю не так?

Кстати, есть ли способ получить 2D-график вместо 3D-графика?

1 Ответ

0 голосов
/ 30 апреля 2018

Вы можете применить KMeans непосредственно к вашему фрейму данных после фильтрации по определенному условию.

В вашем случае вы можете использовать:

kmeans = KMeans(n_clusters=2).fit(df.query('mse < 40'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...