使用30分钟快速入门机器学习时间

1.下载, 安装和启动Python SciPy
如果尚未安装Python和SciPy平台, 请在你的系统上安装它。可以轻松地遵循它的安装指南。
1.1安装SciPy库
使用Python 2.7或3.5以上版本。
你将需要安装5个密钥库。以下是本教程所需的Python SciPy库的列表:

  • 科学的
  • Numpy
  • matplotlib
  • 大熊猫
  • 斯克莱恩
1.2启动Python并检查版本
确保你的Python环境已成功安装并且可以正常工作是一个好主意。
下面的脚本将有助于测试环境。它将导入本教程所需的每个库并打印版本。
输入或复制并粘贴以下脚本:
# Check the versions of libraries# Python version import sys print ( 'Python: {}' . format (sys.version)) # scipy import scipy print ( 'scipy: {}' . format (scipy.__version__)) # numpy import numpy print ( 'numpy: {}' . format (numpy.__version__)) # matplotlib import matplotlib print ( 'matplotlib: {}' . format (matplotlib.__version__)) # pandas import pandas print ( 'pandas: {}' . format (pandas.__version__)) # scikit-learn import sklearn print ( 'sklearn: {}' . format (sklearn.__version__))

如果出现错误, 请停止。现在该修复它了。
2.加载数据。
数据集–
虹膜数据
它是著名的数据, 几乎被每个人用作机器学习和统计中的" hello world"数据集。
数据集包含150个鸢尾花的观测值。花的测量单位有四列, 以厘米为单位。第五列是观察到的花的种类。所有观察到的花均属于三种。
2.1导入库
首先, 让我们导入要使用的所有模块, 功能和对象。
# Load librariesimport pandas from pandas.plotting import scatter_matrix import matplotlib.pyplot as plt from sklearn import model_selection from sklearn.metrics import classification_report from sklearn.metrics import confusion_matrix from sklearn.metrics import accuracy_score from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.naive_bayes import GaussianNB from sklearn.svm import SVC

在继续操作之前, 需要一个工作的SciPy环境。
2.2加载数据集
数据可以直接加载到UCI机器学习存储库中。
使用熊猫加载数据并探索描述性统计数据和数据可视化。
注–加载数据时指定每列的名称。这将在以后探索数据时提供帮助。
url = "https://raw.githubusercontent.com / jbrownlee / Datasets / master / iris.csv" names = [ 'sepal-length' , 'sepal-width' , 'petal-length' , 'petal-width' , 'class' ] dataset = pandas.read_csv(url, names = names)

如果确实存在网络问题, 则可以将iris.csv文件下载到工作目录中, 并使用相同的方法将URL更改为本地文件名来加载它。
3.汇总数据集
现在该看一下数据了。
以几种不同方式查看数据的步骤:
  • 数据集的尺寸。
  • 窥视数据本身。
  • 所有属性的统计摘要。
  • 通过类变量对数据进行分类。
3.1数据集维度
# shape print (dataset.shape)

(150, 5)

3.2查看数据
# head print (dataset.head( 20 ))

sepal-lengthsepal-widthpetal-lengthpetal-widthclass 05.13.51.40.2Iris-setosa 14.93.01.40.2Iris-setosa 24.73.21.30.2Iris-setosa 34.63.11.50.2Iris-setosa 45.03.61.40.2Iris-setosa 55.43.91.70.4Iris-setosa 64.63.41.40.3Iris-setosa 75.03.41.50.2Iris-setosa 84.42.91.40.2Iris-setosa 94.93.11.50.1Iris-setosa 105.43.71.50.2Iris-setosa 114.83.41.60.2Iris-setosa 124.83.01.40.1Iris-setosa 134.33.01.10.1Iris-setosa 145.84.01.20.2Iris-setosa 155.74.41.50.4Iris-setosa 165.43.91.30.4Iris-setosa 175.13.51.40.3Iris-setosa 185.73.81.70.3Iris-setosa 195.13.81.50.3Iris-setosa

3.3统计摘要
这包括计数, 平均值, 最小值和最大值以及一些百分位数。
# descriptions print (dataset.describe())

清楚可见, 所有数值都具有相同的标度(厘米)和相似的范围(介于0到8厘米之间)。
sepal-lengthsepal-widthpetal-lengthpetal-width count150.000000150.000000150.000000150.000000 mean5.8433333.0540003.7586671.198667 std0.8280660.4335941.7644200.763161 min4.3000002.0000001.0000000.100000 25%5.1000002.8000001.6000000.300000 50%5.8000003.0000004.3500001.300000 75%6.4000003.3000005.1000001.800000 max7.9000004.4000006.9000002.500000

3.4班级分布
# class distribution print (dataset.groupby( 'class' ).size())

class Iris-setosa50 Iris-versicolor50 Iris-virginica50

4.数据可视化
使用两种类型的图:
  1. 单变量图可以更好地理解每个属性。
  2. 多变量图可更好地了解属性之间的关系。
4.1单变量图
单变量图–每个单独变量的图。
假设输入变量是数字变量, 我们可以为每个变量创建箱形图和晶须图。
# box and whisker plots dataset.plot(kind = 'box' , subplots = True , layout = ( 2 , 2 ), sharex = False , sharey = False ) plt.show()

使用30分钟快速入门机器学习时间

文章图片
为每个输入变量创建直方图, 以了解分布情况。
# histograms dataset.hist() plt.show()

看起来其中两个输入变量具有高斯分布。注意这一点很有用, 因为我们可以使用可以利用此假设的算法。
使用30分钟快速入门机器学习时间

文章图片
4.2多元图
变量之间的相互作用。
首先, 让我们看看所有属性对的散点图。这有助于发现输入变量之间的结构化关系。
# scatter plot matrix scatter_matrix(dataset) plt.show()

注意一些属性对的对角线分组。这表明高度相关性和可预测的关系。
使用30分钟快速入门机器学习时间

文章图片
5.评估一些算法
创建一些数据模型并估计它们在看不见的数据上的准确性。
  1. 分离出验证数据集。
  2. 设置测试工具以使用10倍交叉验证。
  3. 建立5种不同的模型以根据花的测量预测物种
  4. 选择最佳型号。
5.1创建验证数据集
使用统计方法来估计我们在看不见的数据上创建的模型的准确性。通过对实际看不见的数据进行评估, 可以得出最佳模型对看不见数据的准确性的具体估计。
一些数据被用作算法不会看到的测试数据, 并且这些数据被用来获得第二个独立的想法, 即最佳模型实际上可能有多精确。
测试数据分为两部分, 其中80%将用于训练模型, 而20%将作为验证数据集。
# Split-out validation dataset array = dataset.values X = array[:, 0 : 4 ] Y = array[:, 4 ] validation_size = 0.20 seed = 7 X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split( X, Y, test_size = validation_size, random_state = seed)

X_train和Y_train是用于准备模型的训练数据, 以后可以使用X_validation和Y_validation集。
5.2测试线束
使用10倍交叉验证来评估准确性。这会将我们的数据集分为10个部分, 在9上训练, 在1上测试, 然后对训练测试拆分的所有组合重复。
# Test options and evaluation metric seed = 7 scoring = 'accuracy'

"准确性"指标用于评估模型。它是正确预测的实例数除以数据集中实例总数再乘以100得出的百分比(例如, 准确度为95%)。
5.3建立模型
尚不知道哪种算法可以解决此问题或使用哪种配置。因此, 从图中得出的想法是, 某些类在某些维度上是部分线性可分离的。
评估6种不同的算法:
  • 逻辑回归(LR)
  • 线性判别分析(LDA)
  • K最近邻居(KNN)。
  • 分类和回归树(CART)。
  • 高斯朴素贝叶斯(NB)。
  • 支持向量机(SVM)。
选择的算法是线性(LR和LDA)和非线性(KNN, CART, NB和SVM)算法的混合。在每次运行之前重置随机数种子, 以确保使用完全相同的数据拆分执行每种算法的评估。它确保结果可直接比较。
建立和评估模型:
# Spot Check Algorithms models = [] models.append(( 'LR' , LogisticRegression(solver = 'liblinear' , multi_class = 'ovr' ))) models.append(( 'LDA' , LinearDiscriminantAnalysis())) models.append(( 'KNN' , KNeighborsClassifier())) models.append(( 'CART' , DecisionTreeClassifier())) models.append(( 'NB' , GaussianNB())) models.append(( 'SVM' , SVC(gamma = 'auto' )))# evaluate each model in turn results = [] names = []for name, model in models: kfold = model_selection.KFold(n_splits = 10 , random_state = seed) cv_results = model_selection.cross_val_score( model, X_train, Y_train, cv = kfold, scoring = scoring) results.append(cv_results) names.append(name) msg = "% s: % f (% f)" % (name, cv_results.mean(), cv_results.std()) print (msg)

5.4选择最佳模型
比较模型并选择最准确的模型。运行上面的示例可获得以下原始结果:
LR: 0.966667 (0.040825) LDA: 0.975000 (0.038188) KNN: 0.983333 (0.033333) CART: 0.975000 (0.038188) NB: 0.975000 (0.053359) SVM: 0.991667 (0.025000)

支持向量机(SVM)的估计准确性得分最高。
创建模型评估结果图, 并比较每个模型的分布和平均准确性。每种算法都有大量的精度度量, 因为每种算法都被评估了10次(10倍交叉验证)。
# Compare Algorithms fig = plt.figure() fig.suptitle( 'Algorithm Comparison' ) ax = fig.add_subplot( 111 ) plt.boxplot(results) ax.set_xticklabels(names) plt.show()

箱形图和晶须图被压缩在该范围的顶部, 许多样本达到了100%的精度。
使用30分钟快速入门机器学习时间

文章图片
6.做出预测
KNN算法非常简单, 并且是根据我们的测试得出的准确模型。
直接在验证集上运行KNN模型, 并将结果汇??总为最终准确性得分, 混淆矩阵和分类报告。
# Make predictions on validation dataset knn = KNeighborsClassifier() knn.fit(X_train, Y_train) predictions = knn.predict(X_validation) print (accuracy_score(Y_validation, predictions)) print (confusion_matrix(Y_validation, predictions)) print (classification_report(Y_validation, predictions))

准确度为0.9或90%。混淆矩阵提供了三个错误的指示。最后, 分类报告按精度, 召回率, f1得分和支持分类显示了每个分类, 并显示了出色的结果(允许的验证数据集很小)。
0.9 [[ 700] [ 0 111] [ 029]] precisionrecallf1-scoresupportIris-setosa1.001.001.007 Iris-versicolor0.850.920.8812 Iris-virginica0.900.820.8611micro avg0.900.900.9030 macro avg0.920.910.9130 weighted avg0.900.900.9030

【使用30分钟快速入门机器学习时间】首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。

    推荐阅读