【翻译自 : Best Results for Standard Machine Learning Datasets】

【说明:Jason Brownlee PhD大神的文章个人很喜欢,所以闲暇时间里会做一点翻译和学习实践的工作,这里是相应工作的实践记录,希望能帮到有需要的人!】

初学者机器学习从业人员必须在小型实际数据集上进行练习,这一点很重要。

所谓的标准机器学习数据集包含实际的观察结果,适合内存,并且经过了充分的研究和理解。因此,初学者可以使用它们来快速测试,探索和练习数据准备和建模技术。

从业人员可以确认他们是否具备在标准机器学习数据集上达到良好结果所需的数据技能。好的结果是高于给定数据集在技术上可能的百分之八十或百分之九十的结果。

从业人员在标准机器学习数据集上开发的技能可以为处理更大,更具挑战性的项目提供基础。

在这篇文章中,您将发现用于分类和回归的标准机器学习数据集以及可以期望在每个基线上获得的良好基线和良好结果。

阅读这篇文章后,您将知道:

标准机器学习数据集的重要性。
如何在标准机器学习数据集上系统地评估模型。
用于分类和回归的标准数据集,以及预期的基线和良好性能。

概述

本教程分为七个部分。 他们是:

小型机器学习数据集的价值【Value of Small Machine Learning Datasets】

有许多用于分类和回归预测建模问题的小型机器学习数据集,这些数据集经常被重用。

有时,数据集被用作证明机器学习或数据准备技术的基础。在其他时候,它们被用作比较不同技术的基础。

这些数据集是在应用机器学习的早期(缺乏数据和实际数据集的情况下)收集并公开提供的。因此,它们已成为标准,或者仅由于它们的广泛采用和重用而被规范化,而不是因为问题本身具有任何内在的趣味性。在这些数据集之一上找到好的模型并不意味着您已“解决”了一般性问题。另外,某些数据集可能包含名称或指示符,这些名称或指示符可能被认为是有问题的或在文化上不敏感(收集数据时的意图很可能不是)。这样,它们有时也称为“玩具”数据集。这样的数据集对于机器学习算法的比较点并没有真正的用处,因为大多数经验实验几乎是无法重现的。尽管如此,这样的数据集在当今的应用机器学习领域中还是很有价值的。即使在标准的机器学习库时代,大数据和大量数据也是如此。

它们很有价值的三个主要原因是:他们是:


数据集是真实的。
数据集很小。
数据集被理解。


与人为的数据集相比,真实的数据集非常有用,因为它们比较杂乱。可能存在并且存在测量错误,缺失值,标签错误的示例等等。这些问题中的某些或全部必须被搜索和解决,并且是我们在自己的项目上工作时可能会遇到的一些属性。小型数据集与大小可能为数GB的大型数据集相比非常有用。小型数据集可以轻松地放入内存中,并可以轻松快速地测试和探索许多不同的数据可视化,数据准备和建模算法。测试想法和获得反馈的速度对于初学者而言至关重要,而小型数据集正是为此而努力的。与新的或新建的数据集相比,理解的数据集非常有用。对特征进行了很好的定义,指定了特征的单位,知道了数据的来源,并且对数据集进行了数十,数百个(在某些情况下)数千个研究项目和论文的深入研究。这提供了可以比较和评估结果的上下文,这是在全新领域中不可用的属性。鉴于这些特性,我强烈建议机器学习初学者(以及对特定技术不熟悉的从业者)从标准机器学习数据集开始。

标准机器学习数据集的定义【Definition of a Standard Machine Learning Dataset】

我想更进一步,定义“标准”机器学习数据集的一些更具体的属性。标准机器学习数据集具有以下属性。


少于10,000行(样本)。
少于100列(功能)。
最后一列是目标变量。
存储在CSV格式且没有标题行的单个文件中。
缺少带有问号字符('?')的值
可能会获得比幼稚更好的结果。


既然我们对数据集有了一个清晰的定义,让我们看一下“好”结果的含义。

标准机器学习数据集【Standard Machine Learning Datasets】

如果数据集经常在书籍,研究论文,教程,演示文稿等中使用,则它是标准的机器学习数据集。

这些所谓的经典或标准机器学习数据集的最佳存储库是加利福尼亚大学尔湾分校(UCI)机器学习存储库。该网站按类型对数据集进行分类,并提供数据下载和有关每个数据集的其他信息,并参考相关论文。

我为每种问题类型选择了五个或更少的数据集作为起点。

这篇文章中使用的所有标准数据集都可以在GitHub上找到:

机器学习大师数据集
       还为每个数据集以及有关该数据集的其他详细信息提供了下载链接(所谓的“ .name”文件)。

每个代码示例都将自动为您下载给定的数据集。如果存在问题,则可以手动下载CSV文件,将其与代码示例放置在同一目录中,然后将代码示例更改为使用文件名而不是URL。

例如:

# load dataset
dataframe = read_csv('ionosphere.csv', header=None)

标准数据集的良好结果【Good Results for Standard Datasets】

对于初学者来说,在使用标准机器学习数据集时面临的挑战是取得良好的结果。

通常,如果模型能够表现出比单纯方法更好的性能,例如预测分类中的多数类或回归中的平均值,那么该模型是熟练的。这称为基准模型或性能基准,它提供特定于数据集的性能的相对度量。您可以在此处了解更多信息:

如何知道您的机器学习模型是否具有良好的性能
        鉴于我们现在有了一种确定模型是否对数据集具有技能的方法,因此初学者仍然对给定数据集的性能上限感兴趣。这是必需的信息,用于了解您是否在应用机器学习的过程中“变得良好”。好的并不意味着完美的预测。所有模型都将具有预测错误,并且在现实世界的数据集上不可能做出完美的预测(难道难道?)。为数据集定义“好”或“最佳”结果具有挑战性,因为它通常取决于模型评估方法,尤其取决于评估中使用的数据集和库的版本。给定可用资源,“好”表示“足够好”。通常,这意味着技能得分高于给定无限制技能,时间和计算资源的数据集可能达到的得分的80%或90%。在本教程中,您将发现如何计算基准性能和每个数据集可能达到的“良好”(近乎最佳)性能。您还将发现如何指定用于实现性能的数据准备和模型。而不是解释如何执行此操作,而是提供了一个简短的Python代码示例,您可以使用该示例来重现基线和良好的结果。

模型评估方法【Model Evaluation Methodology】

评估方法既简单又快速,通常在处理小的预测建模问题时推荐使用。

该过程的评估如下:

使用10倍交叉验证对模型进行评估。
评估程序重复三遍。
交叉验证拆分的随机种子为重复编号(1、2或3)。

这样就得出了30个模型性能的估算值,从中可以计算出平均值和标准偏差以总结给定模型的性能。

使用重复数作为每个交叉验证拆分的种子,可以确保在数据集上评估的每个算法都获得相同的数据拆分,从而确保公平的直接比较。

使用scikit-learn Python机器学习库,下面的示例可用于评估给定的模型(或管道)。 RepeatedStratifiedKFold类定义折叠次数和分类重复次数,cross_val_score()函数定义得分并执行评估并返回得分列表,从中可以计算出均值和标准差。

cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')

对于回归,我们可以使用RepeatedKFold类和MAE分数。

cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)
scores = cross_val_score(model, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')

报告的“好”分数是我从自己的“在给定的数据集上快速获得好的结果”脚本的个人集合中可以获得的最好的分数。我相信这些分数代表可以在每个数据集上获得的良好分数,即使不是更好,也可能在每个数据集可能达到的百分之九十或百分之九十五之间。

话虽如此,但我并没有声称它们是最好的分数,因为我没有对性能良好的模型进行超参数调整。我将其留给有兴趣的从业者练习。如果从业者可以解决给定的数据集,则不需要最高分数,因为获得最高百分比分数足以证明其能力。

注意:随着我改进自己的个人脚本并获得更高的分数,我将更新结果和模型。

分类数据集的结果【Results for Classification Datasets】

分类是一种预测建模问题,可以在给定一个或多个输入变量的情况下预测一个标签。

分类任务的基准模型是预测多数标签的模型。 这可以在scikit-learn中使用DummyClassifier类和“ most_frequent”策略来实现; 例如:

model = DummyClassifier(strategy='most_frequent')

分类模型的标准评估是分类准确性,尽管对于不平衡和某些多类别问题而言,这不是理想的选择。 但是,无论好坏,都将使用此分数(目前)。

准确度报告为介于0(0%或没有技能)和1(100%或完美技能)之间的分数。

分类任务有两种主要类型:二进制分类和多分类,这是基于给定数据集要预测的标签数分别分为两个或两个以上。 给定机器学习中分类任务的普遍性,我们将分别对待这两种分类问题。

二进制分类数据集

在本节中,我们将回顾以下二进制分类预测建模数据集的基准和良好性能:

电离层
皮马印第安人糖尿病
声纳
威斯康星州乳腺癌
马绞痛

电离层【Ionosphere】

下载:ionosphere.csv
          详细信息:ionosphere.names
         下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Ionosphere
from numpy import mean
from numpy import std
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.dummy import DummyClassifier
from sklearn.svm import SVC
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/ionosphere.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
# evaluate naive
naive = DummyClassifier(strategy='most_frequent')
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = SVC(kernel='rbf', gamma='scale', C=10)
steps = [('s',StandardScaler()), ('n',MinMaxScaler()), ('m',model)]
pipeline = Pipeline(steps=steps)
m_scores = cross_val_score(pipeline, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的不同,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (351, 34), (351,)
Baseline: 0.641 (0.006)
Good: 0.948 (0.033)

皮马印第安人糖尿病【pima-indians-diabetes】

下载:pima-indians-diabetes.csv
        详细信息:pima-indians-diabetes.name
        下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Pima Indian Diabetes
from numpy import mean
from numpy import std
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.dummy import DummyClassifier
from sklearn.linear_model import LogisticRegression
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
# evaluate naive
naive = DummyClassifier(strategy='most_frequent')
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = LogisticRegression(solver='newton-cg',penalty='l2',C=1)
m_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的不同,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (768, 8), (768,)
Baseline: 0.651 (0.003)
Good: 0.774 (0.055)

声纳【sonar】

下载:sonar.csv
        详细信息:sonar.names

下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Sonar
from numpy import mean
from numpy import std
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PowerTransformer
from sklearn.dummy import DummyClassifier
from sklearn.neighbors import KNeighborsClassifier
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/sonar.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
# evaluate naive
naive = DummyClassifier(strategy='most_frequent')
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = KNeighborsClassifier(n_neighbors=2, metric='minkowski', weights='distance')
steps = [('p',PowerTransformer()), ('m',model)]
pipeline = Pipeline(steps=steps)
m_scores = cross_val_score(pipeline, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的不同,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (208, 60), (208,)
Baseline: 0.534 (0.012)
Good: 0.882 (0.071)

威斯康星州乳腺癌【breast-cancer-wisconsin】

下载:breast-cancer-wisconsin.csv
       详细信息:breast-cancer-wisconsin.names
       下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Wisconsin Breast Cancer
from numpy import mean
from numpy import std
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PowerTransformer
from sklearn.impute import SimpleImputer
from sklearn.dummy import DummyClassifier
from sklearn.svm import SVC
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/breast-cancer-wisconsin.csv'
dataframe = read_csv(url, header=None, na_values='?')
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
# evaluate naive
naive = DummyClassifier(strategy='most_frequent')
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = SVC(kernel='sigmoid', gamma='scale', C=0.1)
steps = [('i',SimpleImputer(strategy='median')), ('p',PowerTransformer()), ('m',model)]
pipeline = Pipeline(steps=steps)
m_scores = cross_val_score(pipeline, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的不同,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (699, 9), (699,)
Baseline: 0.655 (0.003)
Good: 0.973 (0.019)

马绞痛【horse-colic】

下载:horse-colic.csv
       详细信息:horse-colic.names
      下面列出了用于在该数据集上达到基准并获得良好结果的完整代码示例(贷记为Dragos Stan)。

# baseline and good result for Horse Colic
from numpy import mean
from numpy import std
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.dummy import DummyClassifier
from xgboost import XGBClassifier
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv'
dataframe = read_csv(url, header=None, na_values='?')
data = dataframe.values
ix = [i for i in range(data.shape[1]) if i != 23]
X, y = data[:, ix], data[:, 23]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
# evaluate naive
naive = DummyClassifier(strategy='most_frequent')
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = XGBClassifier(colsample_bylevel=0.9, colsample_bytree=0.9, importance_type='gain', learning_rate=0.01, max_depth=4, n_estimators=200, reg_alpha=0.1, reg_lambda=0.5, subsample=1.0)
imputer = SimpleImputer(strategy='median')
pipeline = Pipeline(steps=[('i', imputer), ('m', model)])
m_scores = cross_val_score(pipeline, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的不同,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (300, 27), (300,)
Baseline: 0.637 (0.010)
Good: 0.893 (0.057)

多类分类数据集

在本节中,我们将回顾以下多类分类预测建模数据集的基准和良好性能:

鸢尾花
玻璃
葡萄酒
小麦种子

鸢尾花【iris】

下载:iris.csv
        详细信息:iris.names
       下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Iris
from numpy import mean
from numpy import std
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PowerTransformer
from sklearn.dummy import DummyClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
# evaluate naive
naive = DummyClassifier(strategy='most_frequent')
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = LinearDiscriminantAnalysis()
steps = [('p',PowerTransformer()), ('m',model)]
pipeline = Pipeline(steps=steps)
m_scores = cross_val_score(pipeline, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的不同,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (150, 4), (150,)
Baseline: 0.333 (0.000)
Good: 0.980 (0.039)

玻璃【glass】

下载:glass.csv
      详细信息:glass.names
      下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

注意:将测试安全带从10倍交叉验证更改为5倍交叉验证,以确保每个折叠都有所有类别的示例,并避免出现警告消息。

# baseline and good result for Glass
from numpy import mean
from numpy import std
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.dummy import DummyClassifier
from sklearn.ensemble import RandomForestClassifier
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/glass.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
# evaluate naive
naive = DummyClassifier(strategy='most_frequent')
cv = RepeatedStratifiedKFold(n_splits=5, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
weights = {0:1.0, 1:1.0, 2:2.0, 3:2.0, 4:2.0, 5:2.0}
model = RandomForestClassifier(n_estimators=1000, class_weight=weights, max_features=2)
m_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的不同,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (214, 9), (214,)
Baseline: 0.355 (0.009)
Good: 0.815 (0.048)

葡萄酒【wine】

下载:wine.csv
      详细信息:wine.names
      下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Wine
from numpy import mean
from numpy import std
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.dummy import DummyClassifier
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/wine.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
# evaluate naive
naive = DummyClassifier(strategy='most_frequent')
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = QuadraticDiscriminantAnalysis()
steps = [('s',StandardScaler()), ('n',MinMaxScaler()), ('m',model)]
pipeline = Pipeline(steps=steps)
m_scores = cross_val_score(pipeline, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的不同,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (178, 13), (178,)
Baseline: 0.399 (0.017)
Good: 0.992 (0.020)

小麦种子【Wheat-seeds】

下载:Wheat-seeds.csv
       详细信息:Wheat-Seeds.names
       下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Wine
from numpy import mean
from numpy import std
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.dummy import DummyClassifier
from sklearn.linear_model import RidgeClassifier
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/wheat-seeds.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
# evaluate naive
naive = DummyClassifier(strategy='most_frequent')
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = RidgeClassifier(alpha=0.2)
steps = [('s',StandardScaler()), ('m',model)]
pipeline = Pipeline(steps=steps)
m_scores = cross_val_score(pipeline, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的不同,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (210, 7), (210,)
Baseline: 0.333 (0.000)
Good: 0.973 (0.036)

回归数据集的结果

回归是一种预测建模问题,可以在给定一个或多个输入变量的情况下预测数值。

分类任务的基线模型是预测平均值或中位数的模型。 这可以在scikit-learn中使用DummyRegressor类和“中位数”策略来实现; 例如:

model = DummyRegressor(strategy='median')

回归模型的标准评估是平均绝对误差(MAE),尽管这并非对所有回归问题都理想。 但是,无论好坏,都将使用此分数(目前)。

MAE被报告为介于0(完美技能)和非常大的数字或无穷大(没有技能)之间的错误评分。

在本节中,我们将回顾以下回归预测建模数据集的基准和良好性能:

住房
汽车保险
鲍鱼
自动导入

住房【housing】

下载:housing.csv
       详细信息:housing.names

下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Housing
from numpy import mean
from numpy import std
from numpy import absolute
from pandas import read_csv
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedKFold
from sklearn.dummy import DummyRegressor
from xgboost import XGBRegressor
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = y.astype('float32')
# evaluate naive
naive = DummyRegressor(strategy='median')
cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
n_scores = absolute(n_scores)
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = XGBRegressor(colsample_bylevel=0.4, colsample_bynode=0.6, colsample_bytree=1.0, learning_rate=0.06, max_depth=5, n_estimators=700, subsample=0.8)
m_scores = cross_val_score(model, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
m_scores = absolute(m_scores)
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的不同,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (506, 13), (506,)
Baseline: 6.544 (0.754)
Good: 1.928 (0.292)

汽车保险【auto-insurance】

下载:auto-insurance.csv
       详细信息:auto-insurance.names
       下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Auto Insurance
from numpy import mean
from numpy import std
from numpy import absolute
from pandas import read_csv
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedKFold
from sklearn.pipeline import Pipeline
from sklearn.compose import TransformedTargetRegressor
from sklearn.preprocessing import PowerTransformer
from sklearn.dummy import DummyRegressor
from sklearn.linear_model import HuberRegressor
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/auto-insurance.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
X = X.astype('float32')
y = y.astype('float32')
# evaluate naive
naive = DummyRegressor(strategy='median')
cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(naive, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
n_scores = absolute(n_scores)
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = HuberRegressor(epsilon=1.0, alpha=0.001)
steps = [('p',PowerTransformer()), ('m',model)]
pipeline = Pipeline(steps=steps)
target = TransformedTargetRegressor(regressor=pipeline, transformer=PowerTransformer())
m_scores = cross_val_score(target, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
m_scores = absolute(m_scores)
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (63, 1), (63,)
Baseline: 66.624 (19.303)
Good: 28.358 (9.747)

鲍鱼【abalone】

下载:abalone.csv
       详细信息:abalone.names
      下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Abalone
from numpy import mean
from numpy import std
from numpy import absolute
from pandas import read_csv
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedKFold
from sklearn.pipeline import Pipeline
from sklearn.compose import TransformedTargetRegressor
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import PowerTransformer
from sklearn.compose import ColumnTransformer
from sklearn.dummy import DummyRegressor
from sklearn.svm import SVR
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/abalone.csv'
dataframe = read_csv(url, header=None)
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
# minimally prepare dataset
y = y.astype('float32')
# evaluate naive
naive = DummyRegressor(strategy='median')
transform = ColumnTransformer(transformers=[('c', OneHotEncoder(), [0])], remainder='passthrough')
pipeline = Pipeline(steps=[('ColumnTransformer',transform), ('Model',naive)])
cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(pipeline, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
n_scores = absolute(n_scores)
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = SVR(kernel='rbf',gamma='scale',C=10)
target = TransformedTargetRegressor(regressor=model, transformer=PowerTransformer(), check_inverse=False)
pipeline = Pipeline(steps=[('ColumnTransformer',transform), ('Model',target)])
m_scores = cross_val_score(pipeline, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
m_scores = absolute(m_scores)
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例,您应该看到以下结果。

Shape: (4177, 8), (4177,)
Baseline: 2.363 (0.116)
Good: 1.460 (0.075)

自动导入【auto_imports】

下载:auto_imports.csv
       详细信息:auto_imports.names
      下面列出了在此数据集上达到基准并获得良好结果的完整代码示例。

# baseline and good result for Auto Imports
from numpy import mean
from numpy import std
from numpy import absolute
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.dummy import DummyRegressor
from xgboost import XGBRegressor
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/auto_imports.csv'
dataframe = read_csv(url, header=None, na_values='?')
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
print('Shape: %s, %s' % (X.shape,y.shape))
y = y.astype('float32')
# evaluate naive
naive = DummyRegressor(strategy='median')
cat_ix = [2,3,4,5,6,7,8,14,15,17]
num_ix = [0,1,9,10,11,12,13,16,18,19,20,21,22,23,24]
steps = [('c', Pipeline(steps=[('s',SimpleImputer(strategy='most_frequent')),('oe',OneHotEncoder(handle_unknown='ignore'))]), cat_ix), ('n', SimpleImputer(strategy='median'), num_ix)]
transform = ColumnTransformer(transformers=steps, remainder='passthrough')
pipeline = Pipeline(steps=[('ColumnTransformer',transform), ('Model',naive)])
cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(pipeline, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
n_scores = absolute(n_scores)
print('Baseline: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
# evaluate model
model = XGBRegressor(colsample_bylevel=0.2, colsample_bytree=0.6, learning_rate=0.05, max_depth=6, n_estimators=200, subsample=0.8)
pipeline = Pipeline(steps=[('ColumnTransformer',transform), ('Model',model)])
m_scores = cross_val_score(pipeline, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
m_scores = absolute(m_scores)
print('Good: %.3f (%.3f)' % (mean(m_scores), std(m_scores)))

标准机器学习数据集的最佳结果相关推荐

  1. 盘点76个当下全球免费、优质机器学习数据集获取资源

    目录 普通人身边的机器学习数据 优秀的通用机器学习数据集成平台 kaggle Google Dataset Search Registry of Open Data on AWS Microsoft ...

  2. 如何打造高质量的机器学习数据集?这份超详指南不可错过

    作者 | 周岩,夕小瑶,霍华德,留德华叫兽 转载自知乎博主『运筹OR帷幄』 导读:随着计算机行业的发展,人工智能和数据科学近几年成为了学术和工业界关注的热点.特别是这些年人工智能的发展日新月异,每天都 ...

  3. 80+机器学习数据集,还不快收藏

    整理 | suiling 出品 | AI科技大本营(ID:rgznai100) 对于从事机器学习的小伙伴来说,机器学习必须以大量的数据为基础,否则构建再好的模型也不能达到你想要的效果.同时,不同质量的 ...

  4. 独家 | 为你的数据科学项目提供有力支撑——3个寻找数据集的最佳网站

    作者:Angelia Toh,Self Learn Data Science联合创始人 翻译:李海明 校对:冯羽 本文约1000字,建议阅读5分钟 本文为你介绍3个寻找数据集的最佳网站. 标签:冠状病 ...

  5. 【收藏】机器学习数据集列表:你需要收藏!

    ↑ 点击上方[计算机视觉联盟]关注我们 来源:Medium 编辑:三石 来自新智元 下面的ML大型数据集,总有一款适合你. 就目前来看,找到一个特定的数据集来解决各种机器学习问题,甚至进行实验还是比较 ...

  6. 力荐50个最实用的免费机器学习数据集

    首先,在搜索数据集时要记住这几点: 数据集不应该是混乱的,因为你不希望花费大量时间来清理数据. 数据集不应包含太多行或列,要很容易使用. 数据越干净越好,因为清理大型数据集可能非常耗时. 这个数据集应 ...

  7. AI深度、机器学习数据集资源汇总

    文章目录 前言 一.数据集网站 二.具体数据集 1.记录的具体数据集 2.医疗图像 3.网上数据集汇总链接 总结 前言 继续收集.更新.汇总....................... 一.数据集网 ...

  8. 力荐 50 个最实用的免费机器学习数据集

    https://www.toutiao.com/a6641833252602511879/ 2019-01-02 17:45:11 首先,在搜索数据集时要记住这几点: ♦ 数据集不应该是混乱的,因为你 ...

  9. 力荐!50 个最实用的免费机器学习数据集

    首先,在搜索数据集时要记住这几点: 数据集不应该是混乱的,因为你不希望花费大量时间来清理数据. 数据集不应包含太多行或列,要很容易使用. 数据越干净越好,因为清理大型数据集可能非常耗时. 这个数据集应 ...

  10. 免费的机器学习数据集网站(6300+数据集)

    今天给大家分享一个免费获取机器学习数据集网站: Machine Learning Datasets | Papers With Code 有想法但没有数据集的同学的福音,网站届满很简洁,及本本上提供的 ...

最新文章

  1. 为什么源码编译安装mysql_从源码编译安装MySQL的步骤
  2. 理论计算机科学中最令人困惑的谜题之一被解开
  3. Exchange Server 2003群集系统方案
  4. Smoke Test与Ad hoc Test
  5. Py之mpld3:mpld3的简介、安装、使用方法之详细攻略
  6. 【每日一题】7月7日题目精讲—最短路
  7. OpenShift Express Web管理控制台:入门
  8. 我在暴躁同事小张的胁迫下学会了Go的交叉编译和条件编译
  9. linux自学笔记--memcache和varnish缓存服务器
  10. 自己写的一个执行带参数的sql,PreparedStatement
  11. Python模拟新浪微博登录转载,是我的那篇资料来源
  12. ”数独“android小游戏
  13. 怎么把java文件编译为class文件
  14. 存储容量(空间)换算公式(B、KB、MB、GB、TB、PB、EB)
  15. android简单计时器源码,Android简单计时器实现
  16. 【论文笔记】Switching Convolutional Neural Network for Crowd Counting
  17. Shell脚本语法小记
  18. 聚名师之力,扬信息之帆,逐教育现代化浪潮——韶关市教育信息化蓝凌名教师工作室挂牌仪式
  19. [转载]般若波罗蜜多心经
  20. 4-ipv6基础知识之-邻居发现协议NDP

热门文章

  1. 东芝如何看待蓝牙在物联网热潮下的机遇
  2. asp.net乱码问题
  3. 学习FFmpeg API – 解码视频
  4. FZU1977 Pandora adventure —— 插头DP
  5. 领域驱动设计的个人理解
  6. jquery之父john resig见面会及jquery最新动态
  7. WINCE 中常见的问题收集
  8. javascript 闭包和原型
  9. 用 CSS 实现 Firefox 和 IE 都支持的半透明效果
  10. 山西省计算机商务学校地址,山西计算机等级考试报名地点