zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    NVIDIA Jetson TX2刷机
    安装python2和3在centos7里面的问题
    js和DOM结合实现评论功能 (可以添加,删除)
    js实现计时
    js获取星期日期
    js登录界面演示
    下拉列表演示
    html表单练习
    一个底层w32汇编的小例子,演示 原创
    invoke和call的区别
  • 原文地址:https://www.cnblogs.com/xiao02fang/p/12661481.html
Copyright © 2011-2022 走看看