久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

交叉驗證

 公彥棟 2017-09-05

一,、選擇正確的Model基礎驗證法


[python] view plain copy
  1. from sklearn.datasets import load_iris # iris數(shù)據(jù)集  
  2. from sklearn.model_selection import train_test_split # 分割數(shù)據(jù)模塊  
  3. from sklearn.neighbors import KNeighborsClassifier # K最近鄰(kNN,,k-NearestNeighbor)分類算法  
  4.   
  5. #加載iris數(shù)據(jù)集  
  6. iris = load_iris()  
  7. X = iris.data  
  8. y = iris.target  
  9.   
  10. #分割數(shù)據(jù)并  
  11. X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=4)  
  12.   
  13. #建立模型  
  14. knn = KNeighborsClassifier()  
  15.   
  16. #訓練模型  
  17. knn.fit(X_train, y_train)  
  18.   
  19. #將準確率打印出  
  20. print(knn.score(X_test, y_test))  
  21. # 0.973684210526     基礎驗證的準確率  


二、選擇正確的Model交叉驗證法(Cross-validation)

交叉驗證的基本思想是把在某種意義下將原始數(shù)據(jù)(dataset)進行分組,一部分做為訓練集(train set),另一部分做為驗證集(validation set or test set),首先用訓練集對分類器進行訓練,再利用驗證集來測試訓練得到的模型(model),以此來做為評價分類器的性能指標,。


[python] view plain copy
  1. from sklearn.cross_validation import cross_val_score # K折交叉驗證模塊  
  2.   
  3. #使用K折交叉驗證模塊  
  4. scores = cross_val_score(knn, X, y, cv=5, scoring='accuracy')  
  5.   
  6. #將5次的預測準確率打印出  
  7. print(scores)  
  8. # [ 0.96666667  1.          0.93333333  0.96666667  1.        ]  
  9.   
  10. #將5次的預測準確平均率打印出  
  11. print(scores.mean())  
  12. # 0.973333333333  

三,、準確率和平均方差

一般來說準確率(accuracy)會用于判斷分類(Classification)模型的好壞。
[python] view plain copy
  1. import matplotlib.pyplot as plt #可視化模塊  
  2.   
  3. #建立測試參數(shù)集  
  4. k_range = range(1, 31)  
  5.   
  6. k_scores = []  
  7.   
  8. #藉由迭代的方式來計算不同參數(shù)對模型的影響,,并返回交叉驗證后的平均準確率  
  9. for k in k_range:  
  10.     knn = KNeighborsClassifier(n_neighbors=k)  
  11.     scores = cross_val_score(knn, X, y, cv=10, scoring='accuracy')  
  12.     k_scores.append(scores.mean())  
  13.   
  14. #可視化數(shù)據(jù)  
  15. plt.plot(k_range, k_scores)  
  16. plt.xlabel('Value of K for KNN')  
  17. plt.ylabel('Cross-Validated Accuracy')  
  18. plt.show()  
從圖中可以得知,,選擇12~18k值最好,。高過18之后,準確率開始下降則是因為過擬合(Over fitting)的問題,。


一般來說平均方差(Mean squared error)會用于判斷回歸(Regression)模型的好壞,。
[python] view plain copy
  1. import matplotlib.pyplot as plt  
  2. k_range = range(1, 31)  
  3. k_scores = []  
  4. for k in k_range:  
  5.     knn = KNeighborsClassifier(n_neighbors=k)  
  6.     loss = -cross_val_score(knn, X, y, cv=10, scoring='mean_squared_error')  
  7.     k_scores.append(loss.mean())  
  8.   
  9. plt.plot(k_range, k_scores)  
  10. plt.xlabel('Value of K for KNN')  
  11. plt.ylabel('Cross-Validated MSE')  
  12. plt.show()  

由圖可以得知,平均方差越低越好,,因此選擇13~18左右的K值會最好,。



四、由學習曲線(Learning Curve)來檢視過擬合(Overfitting)的問題

[python] view plain copy
  1. from sklearn.learning_curve import learning_curve #學習曲線模塊  
  2. from sklearn.datasets import load_digits #digits數(shù)據(jù)集  
  3. from sklearn.svm import SVC #Support Vector Classifier  
  4. import matplotlib.pyplot as plt #可視化模塊  
  5. import numpy as np  
加載digits數(shù)據(jù)集,,其包含的是手寫體的數(shù)字,,從0到9。數(shù)據(jù)集總共有1797個樣本,,每個樣本由64個特征組成,, 分別為其手寫體對應的8×8像素表示,每個特征取值0~16,。
[python] view plain copy
  1. digits = load_digits()  
  2. X = digits.data  
  3. y = digits.target  
觀察樣本由小到大的學習曲線變化, 采用K折交叉驗證 cv=10, 選擇平均方差檢視模型效能 scoring='mean_squared_error', 樣本由小到大分成5輪檢視學習曲線(10%, 25%, 50%, 75%, 100%):
[python] view plain copy
  1. train_sizes, train_loss, test_loss = learning_curve(  
  2.     SVC(gamma=0.001), X, y, cv=10, scoring='mean_squared_error',  
  3.     train_sizes=[0.1, 0.25, 0.5, 0.75, 1])  
  4.   
  5. #平均每一輪所得到的平均方差(共5輪,,分別為樣本10%、25%,、50%,、75%、100%)  
  6. train_loss_mean = -np.mean(train_loss, axis=1)  
  7. test_loss_mean = -np.mean(test_loss, axis=1)  
可視化圖形:
[python] view plain copy
  1. plt.plot(train_sizes, train_loss_mean, 'o-', color="r",  
  2.          label="Training")  
  3. plt.plot(train_sizes, test_loss_mean, 'o-', color="g",  
  4.         label="Cross-validation")  
  5.   
  6. plt.xlabel("Training examples")  
  7. plt.ylabel("Loss")  
  8. plt.legend(loc="best")  
  9. plt.show()  




    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多