Scikit-learn是個簡單高效的數據分析工具,它其中封裝了大量
的機器學習算法,內置了大量的公開數據集,而且擁有完善的文檔。算法
1 用KNN算法實現鳶尾花的分類數據庫
鳶尾花是在模式識別文獻中最有名的數據庫。數據集包含3個類,每類有50個實例,每一個類指向一種類型的鳶尾花。一類與另外兩類線性分離,然後者不能彼此線性分離。機器學習
鳶尾花數據集特徵:ide
屬性數量: 4 (數值型,數值型,幫助預測的屬性和類)函數
屬性信息: |
---|
sepal length 萼片長度(釐米) |
sepal width 萼片寬度(釐米) |
petal length 花瓣長度(釐米) |
petal width 花瓣寬度(釐米) |
類別: |
---|
Iris-Setosa 山鳶尾 |
Iris-Versicolour 變色鳶尾 |
Iris-Virginica 維吉尼亞鳶尾 |
步驟1 用sklearn中的load_iris讀取數據集,查看特徵值的前兩行和分類狀況。工具
import numpy as np from sklearn import datasets from sklearn.cross_validation import train_test_split from sklearn.neighbors import KNeighborsClassifier iris =datasets.load_iris() iris_X=iris.data#特徵值 iris_y=iris.target#分類 print(iris_X[:2,:]) print(iris_y)
運行結果:學習
[[5.1 3.5 1.4 0.2]測試
[4.9 3. 1.4 0.2]]code
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]對象
步驟2 把全部的數據集按7:3的比例分爲訓練數據集和測試數據集。輸出的y_train被分開而且打亂了順序。
X_train,X_test,y_train,y_test=train_test_split(iris_X,iris_y,test_size=0.3) print(y_train)
運行結果:
[0 0 2 1 1 1 0 0 0 2 0 0 1 1 0 2 1 0 2 2 2 2 1 0 1 2 0 0 1 0 0 1 0 2 0 0 2 2 2 2 2 0 1 1 2 2 2 1 0 1 0 0 1 2 1 2 1 0 1 0 0 0 2 2 0 0 1 2 0 2 1 0 0 0 1 2 2 1 0 1 1 2 1 2 0 1 0 1 1 0 1 0 1 2 2 2 2 0 1 0 1 2 0 1 0]
步驟3 進行分類訓練和測試。在測試時,knn.predict(X_test)爲測試集特徵的預測值,把它和測試集的真實值作比較。
knn=KNeighborsClassifier() knn.fit(X_train,y_train) print(knn.predict(X_test)) print(y_test)
運行結果:
[2 0 2 0 0 0 1 2 1 0 2 1 2 2 1 0 0 2 0 1 2 2 0 1 2 1 2 1 2 2 0 1 0 1 0 2 0 1 0 1 0 2 1 0 2]
[2 0 2 0 0 0 1 2 1 0 2 1 2 2 1 0 0 2 0 1 2 2 0 1 2 1 1 1 2 2 0 1 0 1 0 2 0 1 0 1 0 2 1 0 2]
最終預測的分類和實際的分類很接近,可是仍是存在一點錯誤。
2 Scikit-learn線性迴歸預測糖尿病
糖尿病數據集是在442例糖尿病患者中得到了十個基線變量,年齡,性別,體重,平均血壓和六個血清測量值,以及興趣愛好,基線後一年的疾病進展的定量測量。
線性迴歸:給定數據集中每一個樣本及其正確答案,根據給定的訓練數據訓練一個模型函數h(hypothesis,假設),目標是找到使殘差平方和最小的那個參數。
本例中爲了闡述線性迴歸的二維圖,只使用了糖尿病數據集的第一個特徵。本例將會訓練出一條直線,使得預測值和正確答案的殘差平方和最小。最後還計算參數,殘差平方和和方差分數。
import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model from sklearn.metrics import mean_squared_error, r2_score # 載入糖尿病數據集 diabetes = datasets.load_diabetes() # 只使用數據集的第一個特徵 diabetes_X = diabetes.data[:, np.newaxis, 2] # 把特徵分爲訓練數據集和測試數據集 diabetes_X_train = diabetes_X[:-20] diabetes_X_test = diabetes_X[-20:] # 把類型分爲訓練數據集和測試數據集 diabetes_y_train = diabetes.target[:-20] diabetes_y_test = diabetes.target[-20:] # 建立一個線性迴歸對象 regr = linear_model.LinearRegression() # 用訓練數據集訓練模型 regr.fit(diabetes_X_train, diabetes_y_train) # 用測試數據集作預測 diabetes_y_pred = regr.predict(diabetes_X_test) # 迴歸方程的係數 print('Coefficients: \n', regr.coef_) # 均方偏差 print("Mean squared error: %.2f" % mean_squared_error(diabetes_y_test, diabetes_y_pred)) # 解釋方差分數:1表明預測的好 print('Variance score: %.2f' % r2_score(diabetes_y_test, diabetes_y_pred)) # 畫出二維的測試數據集圖形 plt.scatter(diabetes_X_test, diabetes_y_test, color='black') # 畫出擬合圖形 plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3) plt.xticks(()) plt.yticks(()) plt.show()
運行結果:
Coefficients:
[938.23786125]
Mean squared error: 2548.07
Variance score: 0.47
感謝您的閱讀,若是您喜歡個人文章,歡迎關注我哦