sklearn機器學習之 學習曲線

2021-09-12 10:52:51 字數 3908 閱讀 8176

【本文精髓源自b站『莫煩python』系列教程】

【適用於python3版本,相應第三方庫建議公升級至最新版本】

下面展示兩種學習曲線的繪製方法:

'''sklearn.learning_curve 中的 learning curve學習曲線 

可以很直觀的看出我們的 model 學習的進度, 對比發現 有沒有overfitting 的問題.

然後我們可以對我們的 model 進行調整, 克服 過擬合overfitting 的問題.'''

%matplotlib inline

from sklearn.model_selection import learning_curve

from sklearn.datasets import load_digits #自帶digits資料集

from sklearn.svm import svc #支援向量分類器

import matplotlib.pyplot as plt

import numpy as np

digits = load_digits()

x = digits.data

y = digits.target

#觀察樣本量由小到大的學習曲線變化趨勢,評價指標採用均方誤差;

#k折交叉驗證採用10折,訓練樣本由小到大體量依次為0.1,0.25,0.5,0.75,1;

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])#嘗試調參gamma;

print(train_loss)#檢視訓練損失,確為負值,依據不同的train_sizes;

train_loss_mean = -np.mean(train_loss,axis=1)#將訓練損失值按行求平均;

#例項演示:a = np.array([[1,2,3],[4,5,6]]),np.mean(a,axis=1),array([2., 5.])

print(train_loss_mean)#檢視訓練損失均值;

test_loss_mean = -np.mean(test_loss,axis=1)#驗證損失,已正向;

plt.figure()

plt.plot(train_sizes,train_loss_mean,'o-',color='r',label='training')

plt.plot(train_sizes,test_loss_mean,'o-',color='g',label='cross-validation')

plt.xlabel("training example quantities")

plt.ylabel('loss')

plt.legend(loc='best')#legend是鐫刻的意思,loc是location位置,best居中;

#下面演示另一種,用learning_curve預設的score精度刻畫學習曲線;

train_sizes,train_scores,test_scores = learning_curve(svc(gamma=0.001),x,y,

cv=10,train_sizes=[0.1,0.25,0.5,0.75,1])#嘗試調參gamma;

print(train_scores)

train_scores_mean = np.mean(train_scores,axis=1)#此時scores本身就為正,無需加負號;

print(train_scores_mean)

test_scores_mean = np.mean(test_scores,axis=1)

plt.figure()

plt.plot(train_sizes,train_scores_mean,'o-',color='r',label='training')

plt.plot(train_sizes,test_scores_mean,'o-',color='g',label='cross-validation')

plt.xlabel("training example quantities")

plt.ylabel('scores')

plt.legend(loc='best')

plt.show()

【print列印結果:】

neg_mean_squared_error 損失值列印:

[[-0. -0.09937888 -0.09937888 -0.09937888 -0.09937888 -0.09937888

-0.09937888 -0.09937888 -0.09937888 -0.09937888]

[-0. -0.03970223 -0.03970223 -0.03970223 -0.03970223 -0.03970223

-0.03970223 -0.03970223 -0.03970223 -0.03970223]

[-0. -0.01985112 -0.01985112 -0.01985112 -0.01985112 -0.01985112

-0.01985112 -0.01985112 -0.01985112 -0.01985112]

[-0. -0.0165426 -0.01323408 -0.01323408 -0.01323408 -0.01323408

-0.01323408 -0.01323408 -0.01323408 -0.01323408]

[-0.02233251 -0.03225806 -0.01054591 -0.03225806 -0.03225806 -0.03225806

-0.03225806 -0.03225806 -0.03225806 -0.00992556]]

[0.08944099 0.03573201 0.017866 0.01224152 0.02686104]

預設的score精度值列印:

[[1. 0.99378882 0.99378882 0.99378882 0.99378882 0.99378882

0.99378882 0.99378882 0.99378882 0.99378882]

[1. 0.99751861 0.99751861 0.99751861 0.99751861 0.99751861

0.99751861 0.99751861 0.99751861 0.99751861]

[1. 0.99875931 0.99875931 0.99875931 0.99875931 0.99875931

0.99875931 0.99875931 0.99875931 0.99875931]

[1. 0.99834574 0.99917287 0.99917287 0.99917287 0.99917287

0.99917287 0.99917287 0.99917287 0.99917287]

[0.99937965 0.99875931 0.99875931 0.99875931 0.99875931 0.99875931

0.99875931 0.99875931 0.99875931 0.99937965]]

[0.99440994 0.99776675 0.99888337 0.99917287 0.99888337]

【兩種學習曲線繪製結果:】

sklearn機器學習 PCA

pca使用的資訊量衡量指標,就是樣本方差,又稱可解釋性方差,方差越大,特徵所帶的資訊量越多 原理推導 class sklearn decomposition.pca n components none,copy true whiten false svd solver auto tol 0.0,it...

sklearn 機器學習庫

pipeline parameters steps 步驟 列表 list 被連線的 名稱,變換 元組 實現擬合 變換 的列表,按照它們被連線的順序,最後乙個物件是估計器 estimator memory 記憶體引數,instance of sklearn.external.joblib.memory...

FPGA機器學習之學習的方向

我可能還有些不一樣的我感覺我能做到的人工智慧,不想去說機械人打敗人類,還有很多像科幻片裡面的機械人一樣的狀態,我沒那個本事。我想做的事情很簡單,讓機器的眼睛看懂普通事物,做一些簡單的事情就可以了。所以我主要的方向就是,機器視覺。那我計畫如何一步一步向前走呢?或者說我要學習哪些東西呢?我目前的內容都是...