系列導讀
前言
大家好,關於數據挖掘或者機器學習的理論我想大家應該都已經了解很多,而數據挖掘的工具例如Pandas、NumPy、Sklearn等在歷史文章都有所介紹,因此今天我們將開始第二個案例實戰也是使用非常多的IRIS數據集:根據花瓣和花萼的長寬預測鳶尾花的種類。
加載數據
首先我們打開Jupyter Notebook
導入相關庫
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from pandas.plotting import scatter_matrix
接下來就是加載數據集,雖然在Sklearn庫中內置了IRIS數據集,但是在這我使用處理好的數據
可以看到我們一共有150條數據,每條數據的前四列對應是花萼長度,花萼寬度,花瓣長度,花瓣寬度,最后一列就是花的種類,現在我們就需要通過這4個特征預測鳶尾花卉屬於(iris-setosa/iris-versicolor/iris-virginica)中的哪一品種。
探索性分析
本節對數據集進行一些探索性分析,首先查看每一類的情況
可以看到我們的數據很完整,一共150條數據每類50條,再查看數據的描述統計
接着我們通過箱線圖與直方圖來觀察數據的最值,中位數和偏差與數據分布
進一步,我們可以繪散點圖來觀察四個變量之間的關聯
可以看到有些變量之前有着明顯的相關性,因此我們可以進行預測
建模分類
現在開始建模分類,和之前的例子一樣,我們將數據集划分為訓練集和測試集。因為我們的數據集只有150條記錄,所以將使用120條記錄來訓練模型,剩下的30條記錄用來評估模型
array = data.values
X = array[:,0:4]
Y = array[:,4]
x_train, x_test, y_train, y_test = model_selection.train_test_split(X, Y, test_size=0.2, random_state=7)
用於分類的模型很多,本文將使用以下四種經典算法來建模並進行評估:
-
K近鄰(KNN)
-
支持向量機(SVM)
-
隨機森林(RF)
-
邏輯回歸(LR)
關於這幾種算法的理論並不會在本文詳細展開,事實上可以通過百度輕松查到每一種算法的推導與應用,你應該了解后再往下進行。
OK,現在我們直接來實現,在Python中實現並不困難,以KNN為例,僅需4行代碼即可完成訓練模型和評估
model = KNeighborsClassifier()
model.fit(x_train,y_train)
predictions = model.predict(x_test)
print(accuracy_score(y_test, predictions))
其他三種算法的實現過程也是類似的,最后我們來看來四種算法的正確率
從結果可以看到,KNN的效果最好為90%,而基於決策樹的隨機森林表現較差為83.3%,當然由於隨機性每次的結果可能不同,感興趣的讀者可以多試幾次。
結束語
以上就是使用著名的IRIS數據集並使用分類算法創建和訓練模型的全部過程,當然你也可以使用更大的數據集/不同的模型來進行訓練。文中使用的數據可以在『早起Python』后台回復:ML獲取。感興趣的話一定要動手敲一遍代碼!下一期將繼續以這種形式來介紹經典的機器學習案例,如果你喜歡本系列的話請點個在看讓我知道,拜拜~