为啥使用 sklearn 库对随机生成的数据的准确性低

Posted

技术标签:

【中文标题】为啥使用 sklearn 库对随机生成的数据的准确性低【英文标题】:Why low accuracy on randomly generated data with sklearn library为什么使用 sklearn 库对随机生成的数据的准确性低 【发布时间】:2020-05-25 03:36:36 【问题描述】:

我已经生成了一个正态分布的样本以及 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

【问题讨论】:

它在随机数据上的准确度很低 - 在一些真实的在线数据集上尝试一下:kaggle.com/datasets @RamshaSiddiqui 我想使用合成数据来学习 LDA sklearn 实现的行为。 【参考方案1】:

.33 三个类别的准确率意味着纯粹的猜测。我认为这是预期的,因为您生成的标签是随机的。该算法应该揭示数据中的结构。您准备数据的方式意味着您的算法没有可供学习的结构。如果您想要更高的准确度,请正确生成数据,例如使用 sklearn.datasets.make_blobs 并在该数据集上训练您的算法。

证明

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

【讨论】:

我想避免使用 sklearn 包来生成我的数据。我想,我的代码无法理解数据。除了使用 sklearn 生成的数据,还有什么方法可以提高准确率吗? @Barsal 有许多用于 ML 的在线数据存储库。 Kaggle 和 UCI 机器学习存储库就是其中的一部分。我的回答对你有帮助吗?

以上是关于为啥使用 sklearn 库对随机生成的数据的准确性低的主要内容,如果未能解决你的问题,请参考以下文章

为啥 SKlearn 和 WEKA 结果不匹配?

为啥我使用 Keras 与随机森林或 knn 的结果很差?

当 `skbio 的 pcoa` 不是时,为啥 `sklearn.manifold.MDS` 是随机的?

详解随机森林-机器学习中调参的基本思想菜菜的sklearn课堂笔记

为啥我使用PyTorch来生成随机数总会失败?

为啥 sklearn.grid_search.GridSearchCV 在每次执行时都会返回随机结果?