python 隨機森林調參 隨機森林調參

2021-10-25 19:30:15 字數 4824 閱讀 4482

前兩天寫了個scikit-learn初步學習,今天沒事又照著寫了個rf模型的,剛開始還不懂這個python列表推導式,想了想還是挺好用的。

然後用了gridsearchcv這個引數優化類,遍歷多種引數組合(也就是暴搜最優引數組合),通過交叉驗證確定最佳效果引數。

所以優化完可能對訓練資料擬合更差,泛化能力更強?

最後還有把資料劃分為訓練集和測試集。

最後說一下用的資料還是scikit-learn初步學習裡面的 但是加了標籤,也就是在資料第一行新增上f1,f2,f3,f4,f5,f6,f7,f8,result。

#coding=utf-8

import pandas as pd

import numpy as np

from sklearn.ensemble import randomforestclassifier

from sklearn.grid_search import gridsearchcv

from sklearn import cross_validation,metrics

import matplotlib.pylab as plt

from sklearn.externals import joblib

from sklearn.cross_validation import train_test_split

train = pd.read_csv("c:\users\administrator\desktop\hh_practice.csv")

# for row in train:

# print row

# print 8888

# print train.head(10)

# print train['result'][:10]

print '類別輸出'

target = "result"

print train['result'].value_counts()

print '樣本的特徵'

print train.columns

# print train[5:6]

#將特徵和型別分開

x_col = [x for x in train.columns if x != 'result']

x = train[x_col]

# print x

y = train['result']

rf_model = randomforestclassifier();

rf_model.fit(x,y)

expected = y

# predicted = rf_model.predict(x)

# #**結果

# print(metrics.classification_report(expected,predicted))

# print(metrics.confusion_matrix(expected,predicted))

y_predprob = rf_model.predict_proba(x)

print y_predprob

#引數調整範圍

param_test1=

gsearch1= gridsearchcv(estimator = randomforestclassifier(min_samples_split=100,

min_samples_leaf=20,max_depth=8,max_features='sqrt' ,random_state=10),

param_grid =param_test1, scoring='roc_auc',cv=5)

gsearch1.fit(x,y)

print '第一次調整引數'

print gsearch1.grid_scores_

print gsearch1.best_params_

print gsearch1.best_score_

param_test2=

gsearch2= gridsearchcv(estimator = randomforestclassifier(n_estimators= 70,

min_samples_leaf=20 ,oob_score=true,random_state=10),

param_grid = param_test2,scoring='roc_auc',iid=false, cv=5)

gsearch2.fit(x,y)

print '第二次引數優化'

print gsearch2.grid_scores_

print gsearch2.best_params_

print gsearch2.best_score_

param_test3=

gsearch3= gridsearchcv(estimator = randomforestclassifier(n_estimators= 70,max_depth=7,min_samples_split=50,

oob_score=true, random_state=10),

param_grid = param_test3,scoring='roc_auc',iid=false, cv=5)

gsearch3.fit(x,y)

print '第三次引數優化'

print gsearch3.grid_scores_

print gsearch2.best_params_

print gsearch2.best_score_

param_test4=

gsearch4= gridsearchcv(estimator = randomforestclassifier(n_estimators= 70,max_depth=7, min_samples_split=50,

min_samples_leaf=20 ,oob_score=true, random_state=10),

param_grid = param_test4,scoring='roc_auc',iid=false, cv=5)

gsearch4.fit(x,y)

print '第四次引數優化'

print gsearch4.grid_scores_

print gsearch4.best_params_

print gsearch4.best_score_

#使用預設引數

rf_model = randomforestclassifier();

rf_model.fit(x,y)

expected = y

predicted = rf_model.predict(x)

#**結果

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

#使用優化後的引數

new_rf_model = randomforestclassifier(n_estimators=70,min_samples_split=50,max_depth=7,max_features=3);

new_rf_model.fit(x,y)

expected = y

predicted = new_rf_model.predict(x)

#**結果

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

#持久化模型 此處的要注意一定要設定compress=3,不然就會很多npy字尾的檔案,是numpy儲存檔案的格

# 式.這個引數貌似是壓縮的

joblib.dump(new_rf_model,r"c:\users\administrator\desktop\temhhhh\rf.model",compress=3)

#載入模型 joblib.load(path)

#將資料劃分為訓練集和測試集

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.5,random_state=66)

print 'x的訓練資料'

print x_train

print 'y的訓練資料'

print y_train

print 'x的測試集'

print x_test

print 'y的測試集'

print y_test

hh_rf = randomforestclassifier()

hh_rf.fit(x_train,y_train)

train_expected = y_train

train_predicted=hh_rf.predict(x_train)

print '訓練效果'

print(metrics.classification_report(train_expected,train_predicted))

print(metrics.confusion_matrix(train_expected,train_predicted))

test_expected = y_test

test_predicted=hh_rf.predict(x_test)

print '**效果'

print(metrics.classification_report(test_expected,test_predicted))

print(metrics.confusion_matrix(test_expected,test_predicted))

隨機森林模型調參方法

列印隨機森林學習器的預設引數配置 1 bootstrap true 2 criterion mse 3 max depth none 4 max features auto 5 max leaf nodes none 6 min impurity decrease 0.0 7 min impurit...

隨機森林 python

這 幾天一直在看隨機森林。可以說遇到任何乙個有關 的問題。都可以首先隨機森林來進行 同時得到的結果也不會太差。在這篇文章裡我首先會向大家推薦幾篇寫的比較好的部落格。接著會將我覺得比較好的例子使用python scikit learn包來實現出來。首先推薦的就是 隨機森林入門 簡化版 老外寫的部落格,...

Python 隨機森林

隨機森林講解文件 scikit learn官方文件 scikit learn的官方文件 主要告訴大家如何使用scikit learn包中的類方法來進行隨機森林演算法的 其中講的比較好的是各個引數的具體用途。這裡我給出我的理解和部分翻譯 1 sklearn ensemble模組包含了兩個基於隨機決策樹...