【Python】基于Python的回歸隨機森林(RandomForestRegression)1:生成折線圖與散點圖(附代碼)

數(shù)據(jù)

我存為.xlsx格式催跪,可以直接讀取投蝉。

一行是一個樣本裙士,前17個為特征(自變量),最后一個是目標變量(因變量)自阱。

我們進行回歸預測通常就是通過一個樣本的特征來預測目標變量嚎莉。

這個數(shù)據(jù)是我之前寫論文的時候用的,事先進行歸一化處理沛豌。得分是該樣本城市的人口增長趋箩。


代碼

——————————————————————————
import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import math

import xlrd

import xlwt

import random

###########1.讀取數(shù)據(jù)部分##########

#載入數(shù)據(jù)并且打亂數(shù)據(jù)集

def load_data(StartPo,EndPo,TestProportion,FeatureNum,Shuffle,FilePath):? ? ? ? #樣本起始行數(shù),結(jié)束行數(shù)加派,測試集占總樣本集比重,特征數(shù)叫确,是否打亂樣本集? ? #如果Testproportion為0或1就訓練集=測試集

? ? #打開excel文件

? ? workbook = xlrd.open_workbook(str(FilePath))? ? ? #excel路徑

? ? sheet = workbook.sheet_by_name('Sheet1')? ? ? ? ? ? #sheet表

? ? Sample = []#總樣本集

? ? train = []#訓練集

? ? test = []#測試集

? ? TestSetSphere = (EndPo-StartPo+1)*TestProportion? #測試集數(shù)目

? ? TestSetSphere = int(TestSetSphere)#測試集數(shù)目

? ? #獲取全部樣本集并打亂順序

? ? for loadi in range(StartPo-1,EndPo):

? ? ? ? RowSample = sheet.row_values(loadi)

? ? ? ? Sample.append(RowSample)

? ? if Shuffle == 1:? #是否打亂樣本集

? ? ? ? random.shuffle(Sample)? #如果shuffle=1,打亂樣本集

? ? #如果Testproportion為0就訓練集=測試集

? ? if TestProportion == 0 or TestProportion == 1:

? ? ? ? TrainSet = np.array(Sample)? ? ? ? ? #變換為array

? ? ? ? TestSet = np.array(Sample)

? ? else:

? ? ? ? #設置訓練集

? ? ? ? for loadtraina in Sample[:(EndPo-TestSetSphere)]:

? ? ? ? ? ? GetTrainValue = loadtraina

? ? ? ? ? ? train.append(GetTrainValue)

? ? ? ? #設置測試集

? ? ? ? for loadtesta in range(-TestSetSphere-1,-1):

? ? ? ? ? ? GetTestValue = Sample[loadtesta]

? ? ? ? ? ? test.append(GetTestValue)

? ? ? ? #變換樣本集

? ? ? ? TrainSet = np.array(train)? ? ? ? ? ? ? ? ? #變換為array

? ? ? ? TestSet = np.array(test)? ? ? ?

? #分割特征與目標變量

? ? x1 , y1 = TrainSet[:,:FeatureNum] , TrainSet[:,-1]

? ? x2 , y2 = TestSet[:,:FeatureNum] , TestSet[:,-1]

? ? return x1 , y1 , x2 , y2

###########2.回歸部分##########

def regression_method(model):

? ? model.fit(x_train,y_train)

? ? score = model.score(x_test, y_test)

? ? result = model.predict(x_test)

? ? ResidualSquare = (result - y_test)**2? ? #計算殘差平方

? ? RSS = sum(ResidualSquare)? #計算殘差平方和

? ? MSE = np.mean(ResidualSquare)? ? ? #計算均方差

? ? num_regress = len(result)? #回歸樣本個數(shù)

? ? print(f'n={num_regress}')

? ? print(f'R^2={score}')

? ? print(f'MSE={MSE}')

? ? print(f'RSS={RSS}')

############繪制折線圖##########

? ? plt.figure()

? ? plt.plot(np.arange(len(result)), y_test,'go-',label='true value')

? ? plt.plot(np.arange(len(result)),result,'ro-',label='predict value')

? ? plt.title('RandomForestRegression R^2: %f'%score)

? ? plt.legend()? ? ? ? # 將樣例顯示出來

? ? plt.show()

? ? return result

##########3.繪制驗證散點圖########

def scatter_plot(TureValues,PredictValues):

? ? #設置參考的1:1虛線參數(shù)

? ? xxx = [-0.5,1.5]

? ? yyy = [-0.5,1.5]

? ? #繪圖

? ? plt.figure()

? ? plt.plot(xxx , yyy , c='0' , linewidth=1 , linestyle=':' , marker='.' , alpha=0.3)#繪制虛線

? ? plt.scatter(TureValues , PredictValues , s=20 , c='r' , edgecolors='k' , marker='o' , alpha=0.8)#繪制散點圖芍锦,橫軸是真實值竹勉,豎軸是預測值

? ? plt.xlim((0,1))? #設置坐標軸范圍

? ? plt.ylim((0,1))

? ? plt.title('RandomForestRegressionScatterPlot')

? ? plt.show()

###########4.預設回歸方法##########

####隨機森林回歸####

from sklearn import ensemble

model_RandomForestRegressor = ensemble.RandomForestRegressor(n_estimators=800)? #esitimators決策樹數(shù)量

########5.設置參數(shù)與執(zhí)行部分#############

#設置數(shù)據(jù)參數(shù)部分

x_train , y_train , x_test , y_test = load_data(2,121,1,17,0,'C:\Code\MachineLearning\極差標準化數(shù)據(jù)集.xlsx')? #行數(shù)以excel里為準

#起始行數(shù)2,結(jié)束行數(shù)121娄琉,訓練集=測試集次乓,特征數(shù)量17,不打亂樣本集

y_pred = regression_method(model_RandomForestRegressor)? ? ? ? #括號內(nèi)填上方法,并獲取預測值

scatter_plot(y_test,y_pred)? #生成散點圖

——————————————————————————————

代碼很簡單孽水,不超過100行票腰。說明說得很清楚了,這里就不贅述了女气。

在使用時一般設置第五部分即可丧慈。

x_train , y_train , x_test , y_test = load_data(2,121,1,17,1,'C:\Code\MachineLearning\極差標準化數(shù)據(jù)集.xlsx') #起始行數(shù)1,結(jié)束行數(shù)121主卫,訓練集=測試集逃默,特征數(shù)量17,打亂樣本集


值得注意的是,這里的起始和結(jié)束行數(shù)我設置成了以excel表里為準簇搅。

效果


最后會出四個參數(shù)和兩個圖完域,一個是折線圖,另一個是散點圖瘩将。

折線圖展示的測試集樣本中的實測值與預測值吟税。

散點圖的橫軸是實測值,豎軸是隨機森林回歸后的預測值姿现。


輸出的四個指標分別是:

n:測試集的樣本數(shù)肠仪,體現(xiàn)在圖上就是折線圖的紅點或綠點數(shù),散點圖的紅點數(shù)备典;

R方:擬合優(yōu)度异旧,模型對數(shù)據(jù)的擬合程度,取值范圍在0~1提佣,越接近1效果越好吮蛹;

MSE:均方誤差荤崇,MSE越小模型效果越好;

RSS:殘差平方和潮针,RSS越小模型效果越好术荤;

一帶而過,不多贅述每篷,MSE還是RSS什么的不懂自己百度或者看代碼就知道是什么意思了瓣戚。



原文鏈接:https://blog.csdn.net/Leaze932822995/article/details/103951150

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市焦读,隨后出現(xiàn)的幾起案子带兜,更是在濱河造成了極大的恐慌,老刑警劉巖吨灭,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刚照,死亡現(xiàn)場離奇詭異,居然都是意外死亡喧兄,警方通過查閱死者的電腦和手機无畔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吠冤,“玉大人浑彰,你說我怎么就攤上這事≌蓿” “怎么了郭变?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涯保。 經(jīng)常有香客問我诉濒,道長,這世上最難降的妖魔是什么夕春? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任未荒,我火速辦了婚禮,結(jié)果婚禮上及志,老公的妹妹穿的比我還像新娘片排。我一直安慰自己,他們只是感情好速侈,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布率寡。 她就那樣靜靜地躺著,像睡著了一般倚搬。 火紅的嫁衣襯著肌膚如雪冶共。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音比默,去河邊找鬼幻捏。 笑死盆犁,一個胖子當著我的面吹牛命咐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谐岁,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼醋奠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伊佃?” 一聲冷哼從身側(cè)響起窜司,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎航揉,沒想到半個月后塞祈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡帅涂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年议薪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媳友。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斯议,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出醇锚,到底是詐尸還是另有隱情哼御,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布焊唬,位于F島的核電站恋昼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赶促。R本人自食惡果不足惜焰雕,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芳杏。 院中可真熱鬧矩屁,春花似錦、人聲如沸爵赵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽空幻。三九已至烁峭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背约郁。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工缩挑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鬓梅。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓供置,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绽快。 傳聞我的和親對象是個殘疾皇子芥丧,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容