一、確保你的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
