目的:為了讓被評估的模型更加準確可信,是一種驗證方法
步驟:所有資料分成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值 這種叫超引數。但是手動過程繁雜,...