機器學習之模型選擇與調優

2021-09-01 15:11:51 字數 4332 閱讀 4324

交叉驗證:將拿到的訓練資料,分為訓練和驗證集。以下圖為例:將資料分成5份,其中乙份作為驗證集。然後經過5次(組)的測試,每次都更換不同的驗證集。即得到5組模型的結果,取平均值作為最終結果。又稱5折交叉驗證。

​ ?:五折交叉驗證,就是分成5份,三份訓練,乙份驗證,乙份測試

我們之前知道資料分為訓練集和測試集,但是**為了讓從訓練得到模型結果更加準確。**做以下處理

​ ? 交叉驗證的目的:為了讓被評估的模型更加準確可信

通常情況下,有很多引數是需要手動指定的(如k-近鄰演算法中的k值),這種叫做超引數。但是手動過程繁雜,所以需要對模型預設幾種超引數組合。每組超引數都採用交叉驗證來進行評估。最後選出最優引數組合建立模型。

# 獲取資料集,載入鳶尾花資料集

from sklearn.datasets import load_iris

# 分割資料集

from sklearn.model_selection import train_test_split

# 特徵工程:標準化

from sklearn.preprocessing import standardscaler

# k-近鄰演算法api

from sklearn.neighbors import kneighborsclassifier

defknn_demo()

:'''knn演算法對鳶尾花資料集分類演示'''

# ? 獲取資料集

iris = load_iris(

)# ? 分割資料集,引數(特徵值,目標值,劃分比例,隨機種子)

x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=

0.3, random_state=8)

# ? 特徵工程:標準化

# ✨ 例項化乙個轉換器類

transfer = standardscaler(

)# ? 傳入資料呼叫fit_transform進行轉換

x_train = transfer.fit_transform(x_train)

# ? 因為來自於同乙個資料集,所以用上乙個的標註差就行,因為均值,標準差是一樣的。

x_test = transfer.transform(x_test)

# ? 例項化乙個估計器

estimator = kneighborsclassifier(

)# ? 模型選擇與調優----網格搜尋和交叉驗證

# ? 準備要調的超引數

param_dict =

estimator = gridsearchcv(estimator, param_grid=param_dict, cv=3)

# ? 模型訓練和評估

# ? 傳入訓練資料集,進行機器學習

estimator.fit(x_train, y_train)

# ? 模型評估

# ? 方法1:比較真實值和**值, y_predict**值

y_predict = estimator.predict(x_test)

print

('**值為:\n'

, y_predict)

print

('比較真實值與**值結果為:\n'

, y_predict == y_test)

# ? 方法2:直接計算模型準確率

print

('模型準確率為:\n'

, estimator.score(x_test, y_test)

)return

none

# ✋ 呼叫函式輸出結果。

knn_demo(

)

print

("在交叉驗證中驗證的最好結果:\n"

, estimator.best_score_)

print

("最好的引數模型:\n"

, estimator.best_estimator_)

print

("每次交叉驗證後的準確率結果:\n"

, estimator.cv_results_)

分割資料集

標準化處理

k-近鄰**

? **過程

# 1.? 獲取資料集

facebook = pd.read_csv(

'./fblocation/train.csv'

)

# 2.? 基本的資料處理,拿到特徵值和目標值

# 1)? 縮小資料範圍

facebook = facebook.query(

"x > 1.0 & x <1.25 & y > 2.0 & y < 2.25"

)# 2) ? 選取有用的時間特徵

time_value = pd.to_datetime(facebook[

"time"

], unit=

"s")

time_value = pd.datetimeindex(time_value)

facebook[

"day"

]= time_value.day

facebook[

"hour"

]= time_value.hour

facebook[

"weekday"

]= time_value.weekday

# 3)? 去掉簽到較少的地點

place_count = facebook.groupby(

"place_id"

).count(

)place_count = place_count[place_count[

"row_id"

]>3]

facebook = facebook[facebook[

"place_id"

].isin(place_count.index)

]

# 4)? 拿到特徵值x和目標值y

x = facebook[

["x"

,"y"

,"accuracy"

,"day"

,"hour"

,"weekday"]]

y = facebook[

"place_id"

]

# 5)? 資料集的劃分

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=

6)

# 6)? 特徵工程:標準化

transfre = standardscaler(

)x_train = transfer.fit_transform(x_train)

x_test = transfer.transform(x_test)

# 7)? knn估計器流程

estimator = kneighborsclassifier(

)# 8) ? 模型評估

# 方法1:比對真實值和**值

y_predict = estimator.predict(x_test)

print

("**結果為:\n"

, y_predict)

print

("比對真實值和**值:\n"

, y_predict == y_test)

# 方法2:直接計算準確率

score = estimator.score(x_test, y_test)

print

("準確率為:\n"

, score)

# 7、交叉驗證和網格搜尋的結果

print

("在交叉驗證中驗證的最好結果:\n"

, estimator.best_score_)

print

("最好的引數模型:\n"

, estimator.best_estimator_)

print

("每次交叉驗證後的準確率結果:\n"

, estimator.cv_results_)

機器學習之模型的選擇與調優

交叉驗證 將拿到的資料,分為訓練和驗證集。以下圖為例 將資料分成4份,其中乙份作為驗證集。然後經過4次 組 的測試,每次都更換不同的驗證集。即得到4組模型的結果,取平均值作為最終結果。又稱4折交叉驗證。通常情況下,有很多引數是需要手動指定的 如k 近鄰演算法中的k值 這種叫超引數。但是手動過程繁雜,...

Spark機器學習 模型選擇與引數調優之交叉驗證

機器學習可以簡單的歸納為 通過資料訓練y f x 的過程,因此定義完訓練模型之後,就需要考慮如何選擇最終我們認為最優的模型。如何選擇最優的模型,就是本篇的主要內容 在 統計學習方法 這本書中,曾經講過模型驗證的方法有三種,分別是簡單的交叉驗證,s折交叉驗證,留一交叉驗證 即把全部資料按照比例分割成兩...

機器學習全套教程(十) 模型選擇與調優

python爬蟲人工智慧教程 www.python88.cn 程式設計資源網 www.python66.cn 應用 交叉驗證目的 為了讓被評估的模型更加準確可信 交叉驗證 將拿到的訓練資料,分為訓練和驗證集。以下圖為例 將資料分成5份,其中乙份作為驗證集。然後經過5次 組 的測試,每次都更換不同的驗...