Почему низкая точность случайно сгенерированных данных с библиотекой sklearn - PullRequest
2 голосов
/ 09 февраля 2020

Я сгенерировал нормально распределенную выборку вместе с 3 классами для выполнения классификации. Я получил очень низкую точность. Мне было интересно, не могли бы вы дать мне ценный отзыв, чтобы улучшить производительность моего классификатора LDA. Я ценю ваше время. Вот мой код:

import pandas as pd
import numpy as np
from random import seed
import random
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import cross_val_score
from sklearn.metrics import f1_score
from sklearn.metrics import accuracy_score
import time

seed(23)
mu, sigma = 0, 0.1 # mean and standard deviation
x1 = np.random.normal(mu, sigma, 1000)
x1=x1.reshape(-1, 1)

seed(1)
y=np.random.randint(0,3,size=(1000,1))
y_cross=np.ravel(y)
start_time1 = time.time()
clf_s=LinearDiscriminantAnalysis()
print('5-fold cross-validation accuracy score:', np.mean(cross_val_score(clf_s,x1, np.ravel(y), cv=5,scoring='accuracy')))
print('5-fold cross-validation F1 score:', np.mean(cross_val_score(clf_s, x1, np.ravel(y), cv=5,scoring='f1_micro')))
end_time1 = time.time()
print ("Computational time in seconds = " +str(end_time1 - start_time1) )

Результаты:

5-fold cross-validation accuracy score: 0.3280613765344133
5-fold cross-validation F1 score: 0.3280613765344133
Computational time in seconds = 1.4167194366455078

1 Ответ

2 голосов
/ 09 февраля 2020
Точность

.33 на 3 классах означает чистое угадывание. Я думаю, что это ожидается, так как сгенерированные вами ярлыки случайны. Предполагается, что al go обнаружит структуру в ваших данных. То, как вы подготовили свои данные, означает, что у вашего al go нет структуры, которой можно учиться. Если вы хотите более высокой точности, сгенерируйте ваши данные правильно, например, с помощью sklearn.datasets.make_blobs и обучите свой al go на этом наборе данных.

Proof

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_blobs

X,y = make_blobs(n_samples=1000, n_features=2, centers=3, random_state=42)

clf=LinearDiscriminantAnalysis()
np.mean(cross_val_score(clf,X,y, cv=5,scoring='accuracy'))
1.0
...