構建網格搜尋 交叉驗證(lr模型)(某金融資料集)

2021-09-01 18:33:50 字數 3082 閱讀 9010

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,roc_auc_score,roc_curve,auc

from sklearn.linear_model import logisticregression

from sklearn.model_selection import gridsearchcv

data=pd.read_csv(

'./data.csv'

,index_col=

0,encoding=

'gbk'

)

#單獨提取出y列標籤,和其餘的88列標記為x

y=data[

'status'

]x=data.drop(

'status'

,axis=1)

#x值的行列數,以及y的分布型別

print

('x.shape:'

,x.shape)

print

('y的分布:'

,y.value_counts(

))

x.shape: (4754, 88)

y的分布: 0 3561

1 1193

name: status, dtype: int64

#首先剔除一些明顯無用的特徵,如id_name,custid,trade_no,bank_card_no

x.drop(

['id_name'

,'custid'

,'trade_no'

,'bank_card_no'

],axis=

1,inplace=

true

)print

(x.shape)

#選取數值型特徵

x_num=x.select_dtypes(

'number'

).copy(

)print

(x_num.shape)

type

(x_num.mean())

#使用均值填充缺失值

x_num.fillna(x_num.mean(

),inplace=

true

)#觀察數值型以外的變數

x_str=x.select_dtypes(exclude=

'number'

).copy(

)x_str.describe(

)#把reg_preference用虛擬變數代替,其它三個變數刪除

x_str[

'reg_preference_for_trad'

]= x_str[

'reg_preference_for_trad'

].fillna(x_str[

'reg_preference_for_trad'

].mode()[

0])x_str_dummy = pd.get_dummies(x_str[

'reg_preference_for_trad'])

x_str_dummy.head(

)#合併數值型變數和名義型(字元型)變數

x_cl = pd.concat(

[x_num,x_str_dummy]

,axis=

1,sort=

false

)#x_cl.shape

print

(x_cl.head())

"""#資料標準化和歸一化

from sklearn import preprocessing

min_max_scale = preprocessing.minmaxscaler()

min_max_data = min_max_scale.fit_transform(x_cl)

from sklearn import preprocessing

x_cl = preprocessing.scale(x_cl)

"""

#以三七比例分割訓練集和測試集

random_state =

1118

x_train,x_test,y_train,y_test = train_test_split(x_cl,y,test_size=

0.3,random_state=

1118

)print

(x_train.shape)

print

(x_test.shape)

#建立邏輯回歸模型

lr = logisticregression(

)lr.fit(x_train, y_train)

lr_param =

"""這一步可能會過擬合吧

"""

lr_grid = gridsearchcv(lr, lr_param, cv=

5, scoring=

'roc_auc'

, n_jobs=-1

)lr_grid.fit(x_train, y_train)

print

(lr_grid.best_score_)

# 最優分數

print

(lr_grid.best_params_)

# 最優引數

print

(lr_grid.cv_results_)

# 結果

lr.set_params(

**lr_grid.best_params_)

lr.fit(x_train, y_train)

(3327, 85)

(1427, 85)

交叉驗證與網格搜尋

交叉驗證與網格搜尋是機器學習中的兩個非常重要且基本的概念,但是這兩個概念在剛入門的時候並不是非常容易理解與掌握,自己開始學習的時候,對這兩個概念理解的並不到位,現在寫一篇關於交叉驗證與網格搜尋的文章,將這兩個基本的概念做一下梳理。網格搜尋 grid search 名字非常大氣,但是用簡答的話來說就是...

網格搜尋和交叉驗證

在介紹網格搜尋和交叉驗證以前先要介紹下什麼是機器學習的超引數。我們常說的機器學習的引數指的是和特徵相關的係數,超引數指的是對於模型的整體規劃具有重要意義的指標 例如支援向量機中的乘法因子c 用於權衡經驗風險和模型複雜度 當支援向量機核函式是為徑向基rbf核函式,對應的鐘型函式的寬度gamma就是核函...

網格搜尋與交叉驗證

一.網格搜尋驗證 sklearn.model selection.gridsearchcv estimator,param grid,scoring none,fit params none,n jobs 1,iid true,refit true,cv none,verbose 0,pre dis...