1. 程式人生 > >機器學習scikit-learn

機器學習scikit-learn

1.分類:監督學習,非監督學習,半監督學習(少量標籤),強化學習,遺傳演算法
2.安裝:pip install scikit-learn 建議直接用anaconda(兩個不用同事安裝使用容易出錯)
**安裝問題:如果不用anaconda用pip建議看下這篇文章https://bbs.csdn.net/topics/391850435
3.sklearn包基本包括四大塊,分類迴歸對應監督學習,聚類對應非監督學習和維度降低
在這裡插入圖片描述
在這裡插入圖片描述
4.機器學習步驟:資料(載入或者生產),處理資料(分train和test,交叉,歸一。。),模型(處理及驗證)

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

iris=datasets.load_iris()
iris_X=iris.data #iris資料
iris_y=iris.target#iris種類

# print(iris_X[:2,:])
# print(iris_y)

X_train,X_test,y_train,y_test=train_test_split(iris_X,iris_y,test_size=0.3)
knn=KNeighborsClassifier()
knn.fit(X_train,y_train)
print(knn.predict(X_test))
print(y_test)

在這裡插入圖片描述

5.模型引數(fit,predict)
coef_ , intercept_ (y=0.1x+0.3 coef_表示的就是x引數0.1,intercept_表示0.3 )
get_params() 這是拿出本模型裡設定的預設引數
score()打分,迴歸和分類打分規則不一樣

6.normalization標準化資料(處理後資料更適合機器學習)
第一步:需要先匯入 from sklearn import preprocessing
第二步:scale正態化處理 preprocessing.scale(*)

7.訓練資料,測試資料,評價模型,f1,R2,過擬合,

8,交叉驗證(scoring:迴歸用mean_squared_error 然後這個一般生產的是負值所以前面加個負號,分類用accuracy)
首先引入 from sklearn.cross_validation import cross_val_score

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.cross_validation import cross_val_score

iris=datasets.load_iris()
iris_X=iris.data #iris資料
iris_y=iris.target#iris種類
knn=KNeighborsClassifier()
scores=cross_val_score(knn,iris_X,iris_y,cv=5,scoring="accuracy")#5表示交叉5組
print(scores)
print(scores.mean())

測試k值:

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.cross_validation import cross_val_score

iris=datasets.load_iris()
iris_X=iris.data #iris資料
iris_y=iris.target#iris種類
k_range=range(1,31)
k_scores=[]
for k in k_range:
    knn=KNeighborsClassifier(n_neighbors=k)
    scores=cross_val_score(knn,iris_X,iris_y,cv=5,scoring="accuracy")#5表示交叉5組
    k_scores.append(scores.mean())

9.視覺化學習過程檢驗學習好壞
首先引入 from sklearn.model_selection import learning_curve

from sklearn.model_selection import learning_curve
import numpy as np
from sklearn import datasets
from sklearn.svm import SVC
import matplotlib.pyplot as plt

digits=datasets.load_digits()
X=digits.data
y=digits.target
train_sizes,train_loss,test_loss=learning_curve(SVC(gamma=0.001),X,y,cv=10,scoring="neg_mean_squared_error",train_sizes=[0.1,0.25,0.5,0.75,1])
train_loss_mean=-np.mean(train_loss,axis=1)
test_loss_mean=-np.mean(test_loss,axis=1)

plt.plot(train_sizes,train_loss_mean,"ro-",label="training")
plt.plot(train_sizes,test_loss_mean,"bo-",label="testing")
plt.legend(loc="best")#表示圖例右上角那個放的位置
plt.show()

在這裡插入圖片描述
10.與9類似,這裡是檢驗gamma值大小對過擬合的影響
與9程式碼也類似把learning_curve改為validation_curve

from sklearn.model_selection import validation_curve
import numpy as np
from sklearn import datasets
from sklearn.svm import SVC
import matplotlib.pyplot as plt

digits=datasets.load_digits()
X=digits.data
y=digits.target
param_range=np.logspace(-6,-2.3,5)#改變gamma的值
train_loss,test_loss=validation_curve(SVC(),X,y,param_name="gamma",param_range=param_range,cv=10,scoring="neg_mean_squared_error") #X,y放在svc後,放後面程式出錯
train_loss_mean=-np.mean(train_loss,axis=1)
test_loss_mean=-np.mean(test_loss,axis=1)

plt.plot(param_range,train_loss_mean,"ro-",label="training")
plt.plot(param_range,test_loss_mean,"bo-",label="testing")
plt.legend(loc="best")#表示圖例右上角那個放的位置
plt.show()

在這裡插入圖片描述
10,儲存訓練的模型
在這裡插入圖片描述
在這裡插入圖片描述