機器學習 Sklearn 除錯模型

2021-08-13 08:53:22 字數 1939 閱讀 2730

1、過擬合

處理過擬合的方法有:

a>減少特徵,降低模型的複雜度

b>減小除錯引數

c>增加訓練資料量

常用的調參方法就是通過在懲罰函式中新增乙個正則化引數c來控制分類邊界對樣本的辨識度,如果是用權重的二次方,則是l2正則化,如果是|w|/c則是l1正則化。

l2損失函式:

x是訓練集,w權重矩陣,b是偏置向量,y真實標籤值

defloss_func

(x,w,b,y):

s = score(x,w,b)

p = softmax(s)

return -np.mean(cross_entropy(y,p))+np.mean(np.dot(w.t,w)/c)

2、欠擬合

處理方式正好和過擬合相反:

a>增加特徵,增加模型的複雜度

b>減大除錯引數

3、交叉驗證

在訓練資料上訓練好模型,在測試資料看訓練的效果,將測試集成績最好的引數組合作為模型的引數,這種方法就是交叉驗證。

但是為了防止特定的資料造成的偶然性,這裡通過取交叉驗證結果的平均值作為模型的引數成績,這就是k折交叉演算法。

import sklearn

from sklearn import datasets

from sklearn.neighbors import kneighborsclassifier

from sklearn.model_selection import cross_val_score,kfold

data = datasets.load_iris()

x = data['data']

y = data['target']

clf = kneighborsclassifier()

#直接算出每個交叉驗證模型的得分,得到得分的陣列,然後可以i取平均

scores = cross_val_score(clf, data.data, data.target, cv=5)

#print(scores.mean())

#檢視kfold的執行演算法過程

kf = kfold(n_splits = 5)

#print(kf)

#kf = kfold(len(y_train),n_folds =10)

for train, test in kf.split(x):

#獲取訓練和測試資料

#print("%s %s" % (train, test))

x_train,x_test = x[train],x[test]

y_train,y_test = y[train],y[test]

print(x_train,x_test)

4、gridsearch暴力尋參

可以通過設定乙個引數搜尋空間,暴力搜尋所有的引數組合,可以同時尋找多個最優引數。

尋找最有引數搜尋範圍只要要兩步:第一定義搜尋範圍,第二在資料中嘗試所有的引數組合。

緊接上例,尋找knn模型的引數k(近鄰數量)的最價值:

from sklearn.grid_search import gridsearchcv 

params

= dict(n_neighbors =

list(range(1,13)))

print(params)

#grid_search

gsearch = gridsearchcv(estimator =clf,param_grid=

params)

gsearch.fit(x,y)

print(gsearch.best_params_, gsearch.best_score_)

模型的除錯目標是:平衡過擬合和欠擬合,通過gridsearch 比例搜尋最佳的模型引數組合。

sklearn儲存機器學習模型的幾種方式

from sklearn import svm from sklearn import datasets import pickle from sklearn.externals import joblib clf svm.svc iris datasets.load iris x,y iris.d...

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...