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__))

如果电脑都安装了,会有如下输出:

Python: 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)]
scipy: 1.1.0
numpy: 1.15.4
matplotlib: 3.0.2
pandas: 0.23.4
sklearn: 0.20.1

     Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。

     NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。     

     Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包。

     pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

     sklearn是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。

二、下面是鸢尾花的模型分析:

import pandas as pd
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
import warnings
#将鸢尾花数据集导入
input_file = "F://python入门//文件//Iris数据集//iris.csv"
f = open(input_file)
names = ['Sepal_Length','Sepal_Width','Petal_Length','Petal_Width','Species']
dataset = pd.read_csv(f, names=names)
#查看数据的形状属性,多少行,多少列
print('查看数据的形状属性:')
print(dataset.shape)
#查看数据的前十行
print('查看数据的前十行:')
print(dataset.head(10))
#查看数据的统计性描述
print('查看数据的统计性描述:')
print(dataset.describe())
#输出箱线图
print('查看每个输入变量的箱线图:')
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
plt.show()
#输出一个直方图
print('查看每个输入变量的直方图:')
dataset.hist()
plt.show()
#散点图
print('全部属性对的散点图:')
scatter_matrix(dataset)
plt.show()
#将导入的数据集拆分为两部分,80% 用于训练模型,20% 用于验证模型。
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)
#每次运行算法前都要重新设置随机数量的种子,以确保是在用相同的数据拆分来评估每个算法
#现在我们用“准确率”这个维度去评估模型,也就是能正确预测出鸢尾花类别的比例
seed = 7
#用准确率这个维度评估模型
scoring = 'accuracy'
#逻辑回归(LR)
#线性判别分析(LDA)
#K最近邻算法(KNN)
#分类和回归树(CART)
#高斯朴素贝叶斯(NB)
#支持向量机(SVM)
models = []
models.append(('LR', LogisticRegression(solver='liblinear')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))
# evaluate each model in turn
results = []
names = []
#遍历每个方法
print('输出每个方法的均值和标准差:')
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)
#消除警告
warnings.filterwarnings("ignore")
#用箱线图将模型评估结果表示出来
fig = plt.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
print('利用箱线图衡量各模型方法的准确率:')
plt.show()
#经过验证,KNN 算法的准确率最高。现在我们看看该模型在验证集上的准确度。
knn = KNeighborsClassifier()
knn.fit(X_train, Y_train)
predictions = knn.predict(X_validation)
#模型的准确率
print('模型的准确率:')
print(accuracy_score(Y_validation, predictions))
#混淆矩阵
print('混淆矩阵:')
print(confusion_matrix(Y_validation, predictions))
#分类报告显示了每个类别的精确率、召回率、F1 值
print('分类报告:')
print(classification_report(Y_validation, predictions))

输出结果:

查看数据的形状属性:
(150, 5)
查看数据的前十行:
   Sepal_Length  Sepal_Width  Petal_Length  Petal_Width Species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa
5           5.4          3.9           1.7          0.4  setosa
6           4.6          3.4           1.4          0.3  setosa
7           5.0          3.4           1.5          0.2  setosa
8           4.4          2.9           1.4          0.2  setosa
9           4.9          3.1           1.5          0.1  setosa
查看数据的统计性描述:
       Sepal_Length  Sepal_Width  Petal_Length  Petal_Width
count    150.000000   150.000000    150.000000   150.000000
mean       5.843333     3.057333      3.758000     1.199333
std        0.828066     0.435866      1.765298     0.762238
min        4.300000     2.000000      1.000000     0.100000
25%        5.100000     2.800000      1.600000     0.300000
50%        5.800000     3.000000      4.350000     1.300000
75%        6.400000     3.300000      5.100000     1.800000
max        7.900000     4.400000      6.900000     2.500000
查看每个输入变量的箱线图:

查看每个输入变量的直方图:


全部属性对的散点图:

输出每个方法的均值和标准差:
LR: 0.966667 (0.040825)
LDA: 0.975000 (0.038188)
KNN: 0.983333 (0.033333)
CART: 0.966667 (0.040825)
NB: 0.975000 (0.053359)
SVM: 0.991667 (0.025000)

利用箱线图衡量各模型方法的准确率:

模型的准确率:
0.9
混淆矩阵:
[[ 7  0  0]
 [ 0 11  1]
 [ 0  2  9]]
分类报告:
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00         7
  versicolor       0.85      0.92      0.88        12
   virginica       0.90      0.82      0.86        11

   micro avg       0.90      0.90      0.90        30
   macro avg       0.92      0.91      0.91        30
weighted avg       0.90      0.90      0.90        30
 
原文地址:https://www.cnblogs.com/xiao02fang/p/12661481.html