交叉學習驗證 西瓜書 機器學習 資料劃分與交叉驗證

2021-10-16 11:57:51 字數 2575 閱讀 2892

from sklearn.model_selection import train_test_split # 資料劃分所需的函式

x_train, x_test, y_train, y_test = train_test_split(train_data, train_target, test_size=0.4, random_state=0)

# 劃分訓練集和測試集.test_size為測試集所佔的比例

print('訓練集大小:',x_train.shape,y_train.shape) # 訓練集樣本大小

print('測試集大小:',x_test.shape,y_test.shape) # 測試集樣本大小

train_test_split 函式用於隨機劃分訓練集和測試集的函式,其中引數:

此外,該函式還存在乙個引數stratify:是為了保持split前類的分布。比如有100個資料,80個屬於a類,20個屬於b類。如果train_test_split(test_size=0.25, stratify = y_all), 那麼split之後資料如下:

training: 75個資料,其中60個屬於a類,15個屬於b類。

testing: 25個資料,其中20個屬於a類,5個屬於b類。

用了stratify引數,training集和testing集的類的比例是 a:b= 4:1,等同於split前的比例(80:20)。通常在這種類分布不平衡的情況下會用到stratify。

#  如果涉及到歸一化,則在測試集上也要使用訓練集模型提取的歸一化函式。

from sklearn import preprocessing # 預處理模組

scaler = preprocessing.standardscaler().fit(x_train) # 通過訓練集獲得歸一化函式模型,在訓練集和測試集上都使用這個歸一化函式

x_train_transformed = scaler.transform(x_train)

clf = svm.svc(kernel='linear', c=1).fit(x_train_transformed, y_train) # 使用訓練集訓練模型

x_test_transformed = scaler.transform(x_test)

print(clf.score(x_test_transformed, y_test)) # 計算測試集的度量值(準確度) 可見歸一化後結果未必好

歸一化後加快了梯度下降求最優解的速度;如果機器學習模型使用梯度下降法求最優解時,歸一化往往非常有必要,否則很難收斂甚至不能收斂。

歸一化有可能提高精度;一些分類器需要計算樣本之間的距離(如歐氏距離)如果乙個特徵值域範圍非常大,那麼距離計算就主要取決於這個特徵,從而與實際情況相悖(比如這時實際情況是值域範圍小的特徵更重要)。

概率模型(樹形模型)不需要歸一化,因為它們不關心變數的值,而是關心變數的分布和變數之間的條件概率,如決策樹、rf。而像adaboost、svm、lr、knn、kmeans之類的最優化問題就需要歸一化。

作用:去均值和方差歸一化,且是針對每乙個特徵維度來做的,而不是針對樣本。 標準差標準化(standardscale)使得經過處理的資料符合標準正態分佈,即均值為0,標準差為1,其轉化函式為:該值減去均值除以標準差!

這種歸一化方法比較適用在數值比較集中的情況。缺陷:如果max和min不穩定,很容易使得歸一化結果不穩定,使得後續使用效果也不穩定。實際使用中可以用經驗常量值來替代max和min。

經常用在資料分化比較大的場景,有些數值很大,有些很小。通過一些數學函式,將原始值進行對映。該方法包括 log、指數,正切等。需要根據資料分布的情況,決定非線性函式的曲線

# ***********************************直接呼叫交叉驗證評估模型*************************=

from sklearn.model_selection import cross_val_score # 交叉驗證所需的函式

clf = svm.svc(kernel='linear', c=1)

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

#引數分別是:模型,資料,標籤,迭代次數

print(scores) # 列印輸出每次迭代的度量值(準確度)

print("accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) # 獲取置信區間。(也就是均值和方差)

交叉驗證優點:

1:交叉驗證用於評估模型的**效能,尤其是訓練好的模型在新資料上的表現,可以在一定程度上減小過擬合。

2:還可以從有限的資料中獲取盡可能多的有效資訊。

此外還有乙個kfold:

kfold是將資料集劃分為k-折,只是劃分資料集;

cross_val_score是根據模型進行計算,計算交叉驗證的結果,你可以簡單認為就是cross_val_score中呼叫了kfold進行資料集劃分。

交叉學習驗證 西瓜書 機器學習必知必會 交叉驗證

當我們根據資料訓練出乙個機器學習模型時,我們希望它在新的資料上也保持較高的準備率,這就需要我們對學習到的不同模型有乙個模型評估準則。為了評估模型的泛化效能 指模型在未知資料上的 能力 防止模型落入 過擬合 的陷進。我們人為地將原始資料劃分為訓練集和測試集,前者用於訓練模型,後者用於評估模型的泛化效能...

西瓜書 機器學習《一》

泛化能力 學習的模型適應新樣本的能力。奧卡姆剃刀原則 自然科學研究中常用的原則。即 若有多個假設和觀測一致,那麼就選擇最簡單的假設。連線主義 黑箱模型,例如 神經網路,不可解釋性,引數手工等調整 符號主義 決策理論的學習技術,例如決策樹學習 以資訊理論為基礎,以資訊熵的最小化為目標。統計學習 svm...

西瓜書機器學習筆記 一

記錄學習機器學習的過程,方便自己以後查閱 機器學習是一門致力研究如何通過計算的手段,利用經驗來改善系統自身的效能的學科 在計算機系統中,經驗通常以 資料 形式存在,因此,機器學習所研究的主要內容是關於在計算機上從資料中產生 模型 的演算法,即 學習演算法 learning algorithm 通過經...