鳶尾花的分類是python機器學習中比較經典的一個入門式教學課程,
屬於監督學習算法
包括四個方面,訓練,測試,評估,預測
此次記錄也適合從這四個方面出發
一:訓練
利用已知的鳶尾花數據構建機器學習模型,用於預測新測量的鳶尾花的品種。
鳶尾花的數據哪里來呢?有一個開源項目叫做sciket-learn,里面有鳶尾花的150個數據集。
1.1安裝sciket-learn
pip install sciket-learn
1.2安裝必要的工具和庫文件
pip install numpy scipy matplotlib ipython pandas
直接使用命令安裝上述都是默認安裝最新版本的軟件,我這里安裝完之后的版本分別是:
pandas:0.23.4 修改和操作表格的
matplotlib:2.2.3 將數據繪制成圖像的
Numpy:1.15.2 用來科學計算的,就是將數據變換成自己想要的格式
SciPy:1.1.0 功能和Numpy差不多
IPython:5.8.0 沒什么用
scikit-learn:1.1.0 導入鳶尾花數據的
1.3分配數據
上代碼:
#coding=utf-8 import numpy as np from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris #導入三個庫 iris_dataset = load_iris() #加載iris_dataset數據集 trainData,testData,trainResult,testResult = train_test_split(iris_dataset["data"],iris_dataset["target"],random_state = 0) #train_test_split函數將iris_dataset數據集中的['data']數據依據['target']標簽分類為75%的訓練集和25%的測試集。 #iris_dataset是一個字典類型的數據,有用6個key和對應的值,其中key分別為:['target', #'DESCR', 'target_names', 'feature_names', 'data', 'filename'] #可以嘗試iris_dataset.keys()和iris_dataset.values()查看相應的數據,比如查看target_names標簽對應的值可以寫作:iris_dataset['target_names']
1.4構建算法
from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors = 1) knn.fit(trainData,trainResult) #K近鄰算法:算法會在訓練集中尋找與這個新數據點距離最近的k個鄰居,根據他們的類別做出預測。 #這里讓knn進行大量的訓練,擁有大量數據的累積后,使得knn擁有了一定預測新數據類型的能力。
二:測試與評估
此時的knn今時不同往日了,訓練了那么多,是時候試試水了,但是不能貿然拿去用吧,還是先用測試集測試一下,剛剛分配數據集的時候不是還分配了25%的數據用來測試嗎。試一試
testPrediction = knn.predict(testData) #testData這些數據的類型是已知的---testResult,里面包含的是testData真實的結果,我們拿預測的結果和真實結果比對一下,就可以知道這個算法的預測准確的能力了吧。試一試 print "Test set score is :{:.2f}".format(np.mean(testPrediction == testResult)) #這樣可以打印出testPrediction和testResult之間的差異比例
三:預測
用一組新的數據來試一試
newIRIS = [[5,2.0,1,0.2]] #四個數據分別代表:花萼長度,花萼寬度,花瓣長度,花瓣寬度 #為什么用兩個中括號括起來呢?因為knn.predict的數據數據必須是一個二維數組 a = knn.predict(newIRIS) print a
