模型選擇與調優 My way of ML9

2021-08-29 14:04:40 字數 2902 閱讀 2630

目的:為了讓被評估的模型更加準確可信,是一種驗證方法

步驟:所有資料分成n等分,第乙份作為測試集,其他作為驗證集

。。。。。。。。。。。二。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。

所有模型的準確率求平均值

目的:選擇引數

通常很多需要手動指定的引數都是超引數,所謂超引數就是能對演算法效果產生很大影響的引數。但是手動選擇引數過程很複雜,我們交給計算機來做。設定幾種超引數組合,每種組合都要用交叉驗證來評估,最後選出最優引數組合來建立模型,一般選擇10折交叉驗證

網格搜尋api:model_selection.gridsearchcv

*引數(estimator,paeam_grid,cv=none)*分別時估計器,超參組合,幾折交叉搜尋

她返回的物件可以用fit和score,best_estimator

# 網格搜尋

from sklearn.datasets import load_iris, fetch_20newsgroups, load_boston

from sklearn.model_selection import train_test_split

from sklearn.neighbors import kneighborsclassifier

import pandas as pd

from sklearn.preprocessing import standardscaler

from sklearn.model_selection import gridsearchcv

def knncls():

"""k近鄰**使用者簽到位置

:return: none

"""# 讀取資料

data = pd.read_csv('./train.csv')

print(data.head(10))

# 處理資料

# 1.縮小資料的範圍,查詢資料篩選

data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75 ") # query裡面字串填寫縮小條件

# 2.處理時間的資料,時間戳轉換成年月日時分秒當作新特徵

time_value = pd.to_datetime(data["time"], unit="s")

# print(time_value)

# 3.把日期格式轉化成字典格式

time_value = pd.datetimeindex(time_value)

# 4.構造一些特徵,因為年和月是一樣的所以不做為特徵了

data["day"] = time_value.day # 直接增加乙個特徵

data["hour"] = time_value.hour

data["weekday"] = time_value.weekday

# 5.把原來的時間戳特徵刪除

data.drop(["time"], axis=1)

print(data)

# 把簽到數量少於n的目標位置刪除

place_count = data.groupby("place_id").count() # data以place_id來分組

tf = place_count[place_count.row_id > 3].reset_index() # 分完組後row_id已經變成了place_id的統計和

# print(tf)

data = data[data["place_id"].isin(tf.place_id)] # isin和布林邏輯結合來清洗資料

# print(data.head(10))

# 取出資料中的特徵值和目標值

y = data["place_id"] # 目標值

x = data.drop("place_id", axis=1) # 特徵值

x = x.drop("row_id", axis=1)

# 分割訓練集和測試集

x_trian, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)

# 特徵工程(標準化)

std = standardscaler()

# 對訓練集和測試集的特徵值標準化

x_trian = std.fit_transform(x_trian)

x_test = std.transform(x_test)

# 進行演算法流程

knn = kneighborsclassifier()

# knn.fit(x_trian, y_train)

## # 得出**結果

# y_predict = knn.predict(x_test)

# print("**的目標簽到位置為:", y_predict)

## # 得出準確率

# print("**的準確率是", knn.score(x_test, y_test))

# 進行網格搜尋

# 構造一些引數的值用於搜尋

param =

gc = gridsearchcv(knn, param_grid =param, cv=10)

gc.fit(x_trian, y_train)

# **準確率

print("在測試集上的準確率", gc.score(x_test, y_test))

print("在交叉驗證中最好的結果",gc.best_score_)

print("選擇了最好的模型是",gc.best_estimator_)

print("每個超引數每個交叉驗證的結果",gc.cv_results_)

if __name__ == '__main__':

knncls()

模型選擇與調優(KNN)

一 交叉驗證 cross validation 將拿到的訓練資料,分為訓練和驗證集。以下圖為例 將資料分成4份,其中乙份作為驗證集。然後經過4次 組 的測試,每次都更換不同的驗證集。即得到4組模型的結果,取平均值作為最終結果。又稱4折交叉驗證。二 超引數搜尋 網格搜尋 通常情況下,有很多引數是需要手...

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

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

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

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