
來源:數(shù)據(jù)STUDIO
作者:云朵君
所有的參數(shù),屬性與接口,全部和隨機森林分類器一致。僅有的不同就是回歸樹與分類樹的不同,不純度的指標, 參數(shù)Criterion不一致。
RandomForestRegressor(n_estimators='warn',
criterion='mse',
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_features='auto',
max_leaf_nodes=None,
min_impurity_decrease=0.0,
min_impurity_split=None,
bootstrap=True,
oob_score=False,
n_jobs=None,
random_state=None,
verbose=0,
warm_start=False)
criterion
回歸樹衡量分枝質(zhì)量的指標,支持的標準有三種
其中是樣本數(shù)量,i是每一個數(shù)據(jù)樣本,是模型回歸出的數(shù)值,是樣本點i實際的數(shù)值標簽。所以MSE的本質(zhì)是樣本真實數(shù)據(jù)與回歸結果的差異。在回歸樹中,MSE不只是我們的分枝質(zhì)量衡量指標,也是我們最常用的衡量回歸樹回歸質(zhì)量的指標,當我們在使用交叉驗證,或者其他方式獲取回歸樹的結果時,我們往往選擇均方誤差作為我們的評估(在分類樹中這個指標是score代表的預測準確率)。在回歸中,我們追求的是,MSE越小越好。
然而,回歸樹的接口score返回的是R平方,并不是MSE。此處可參考線性回歸中模型評估指標。
最重要的屬性和接口,都與隨機森林的分類器相一致,還是apply, fit, predict和score最為核心。值得一提的是,隨機森林回歸并沒有predict_proba這個接口,因為對于回歸來說,并不存在一個樣本要被分到某個類別的概率問題,因此沒有predict_proba這個接口。
from sklearn.datasets import load_boston from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestRegressor
boston = load_boston()
regressor = RandomForestRegressor(n_estimators=100,random_state=0)
cross_val_score(regressor, boston.data, boston.target, cv=10 ,scoring = "neg_mean_squared_error")
sorted(sklearn.metrics.SCORERS.keys())
返回十次交叉驗證的結果,注意在這里,如果不填寫scoring = "neg_mean_squared_error",交叉驗證默認的模型衡量指標是R平方,因此交叉驗證的結果可能有正也可能有負。而如果寫上scoring,則衡量標準是負MSE,交叉驗證的結果只可能為負。
在之前缺失值處理文章中提到運用隨機森林回歸填補缺失值,我們來看看具體如何操作。
導包
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_boston from sklearn.impute import SimpleImputer from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import cross_val_score
數(shù)據(jù)準備
以波?頓數(shù)據(jù)集為例,導?完整的數(shù)據(jù)集并探索
dataset = load_boston()
dataset.data.shape #總共506*13=6578個數(shù)據(jù) X, y = dataset.data, dataset.target
n_samples = X.shape[0]
n_features = X.shape[1]
生產(chǎn)缺失值
rng = np.random.RandomState(0) missing_rate = 0.5 n_missing_samples = int(np.floor(n_samples * n_features * missing_rate)) #np.floor向下取整,返回.0格式的浮點數(shù)
所有數(shù)據(jù)要隨機遍布在數(shù)據(jù)集的各?各列當中,??個缺失的數(shù)據(jù)會需要?個?索引和?個列索引如果能夠創(chuàng)造?個數(shù)組,包含3289個分布在0~506中間的?索引,和3289個分布在0~13之間的列索引,那我們就可以利?索引來為數(shù)據(jù)中的任意3289個位置賦空值。
我們現(xiàn)在采樣3289個數(shù)據(jù),遠遠超過樣本量506,所以使?隨機抽取的函數(shù)randint。但如果需要的數(shù)據(jù)量?于我們的樣本量506,那我們可以采?np.random.choice來抽樣,choice會隨機抽取不重復的隨機數(shù),因此可以幫助我們讓數(shù)據(jù)更加分散,確保數(shù)據(jù)不會集中在?些?中。
missing_features_index = rng.randint(0,n_features,n_missing_samples)
missing_samples_index = rng.randint(0,n_samples,n_missing_samples) # missing_samples=rng.choice(dataset.data.shape[0],n_missing_samples,replace=False) X_missing = X.copy()
y_missing = y.copy()
X_missing[missing_samples, missing_features] = np.nan
X_missing = pd.DataFrame(X_missing) # 轉(zhuǎn)換成DataFrame是為了后續(xù)?便各種操作, # numpy對矩陣的運算速度快,但是在索引等功能上卻不如pandas來得好?
然后我們?0,均值和隨機森林來填寫這些缺失值,然后查看回歸的結果如何
#使?均值進?填補 from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')
X_missing_mean = imp_mean.fit_transform(X_missing) #使?0進?填補 imp_0 = SimpleImputer(missing_values=np.nan, strategy="constant",fill_value=0)
X_missing_0 = imp_0.fit_transform(X_missing)
隨機森林填補
使?隨機森林回歸填補缺失值任何回歸都是從特征矩陣中學習,然后求解連續(xù)型標簽y的過程,之所以能夠?qū)崿F(xiàn)這個過程,是因為回歸算法認為,特征矩陣和標簽之前存在著某種聯(lián)系。實際上,標簽和特征是可以相互轉(zhuǎn)換的,?如說,在?個"?地區(qū),環(huán)境,附近學校數(shù)量"預測"房價"的問題中,我們既可以?"地區(qū)","環(huán)境","附近學校數(shù)量"的數(shù)據(jù)來預測"房價",也可以反過來,?"環(huán)境","附近學校數(shù)量"和"房價"來預測"地區(qū)"。?回歸填補缺失值,正是利?了這種思想。
對于?個有n個特征的數(shù)據(jù)來說,其中特征T有缺失值,我們就把特征T當作標簽,其他的n-1個特征和原本的標簽組成新的特征矩陣。那對于T來說,它沒有缺失的部分,就是我們的Y_test,這部分數(shù)據(jù)既有標簽也有特征,?它缺失的部分,只有特征沒有標簽,就是我們需要預測的部分。
特征T不缺失的值對應的其他n-1個特征 + 本來的標簽:X_train
特征T不缺失的值:Y_train
特征T缺失的值對應的其他n-1個特征 + 本來的標簽:X_test
特征T缺失的值:未知,我們需要預測的Y_test
這種做法,對于某?個特征?量缺失,其他特征卻很完整的情況,?常適?。
那如果數(shù)據(jù)中除了特征T之外,其他特征也有缺失值怎么辦?答案是遍歷所有的特征,從缺失最少的開始進?填補(因為填補缺失最少的特征所需要的準確信息最少)。填補?個特征時,先將其他特征的缺失值?0代替,每完成?次回歸預測,就將預測值放到原本的特征矩陣中,再繼續(xù)填補下?個特征。每?次填補完畢,有缺失值的特征會減少?個,所以每次循環(huán)后,需要?0來填補的特征就越來越少。當進?到最后?個特征時(這個特征應該是所有特征中缺失值最多的),已經(jīng)沒有任何的其他特征需要?0來進?填補了,?我們已經(jīng)使?回歸為其他特征填補了?量有效信息,可以?來填補缺失最多的特征。遍歷所有的特征后,數(shù)據(jù)就完整,不再有缺失值了。
X_missing_reg = X_missing.copy()
sortindex = np.argsort(X_missing_reg.isnull().sum(axis=0)).values
for i in sortindex:
#構建我們的新特征矩陣和新標簽 df = X_missing_reg
fillc = df.iloc[:,i]
df = pd.concat([df.iloc[:,df.columns != i],pd.DataFrame(y_full)],axis=1)
#在新特征矩陣中,對含有缺失值的列,進?0的填補 df_0 =SimpleImputer(missing_values=np.nan,
strategy='constant',fill_value=0).fit_transform(df)
#找出我們的訓練集和測試集 Ytrain = fillc[fillc.notnull()]
Ytest = fillc[fillc.isnull()]
Xtrain = df_0[Ytrain.index,:]
Xtest = df_0[Ytest.index,:]
#?隨機森林回歸來填補缺失值 rfc = RandomForestRegressor(n_estimators=100)
rfc = rfc.fit(Xtrain, Ytrain)
Ypredict = rfc.predict(Xtest)
#將填補好的特征返回到我們的原始的特征矩陣中 X_missing_reg.loc[X_missing_reg.iloc[:,i].isnull(),i] = Ypredict
建模
#對所有數(shù)據(jù)進?建模,取得MSE結果 X = [X_full,X_missing_mean,X_missing_0,X_missing_reg] mse = [] std = [] for x in X:
estimator = RandomForestRegressor(random_state=0, n_estimators=100)
scores =
cross_val_score(estimator,x,y_full,scoring='neg_mean_squared_error',
cv=5).mean()
mse.append(scores * -1)
可視化
x_labels = ['Full data',
'Zero Imputation',
'Mean Imputation',
'Regressor Imputation']
colors = ['r', 'g', 'b', 'orange']
plt.figure(figsize=(12, 6))
ax = plt.subplot(111) for i in np.arange(len(mse)):
ax.barh(i, mse[i],color=colors[i], alpha=0.6, align='center')
ax.set_title('Imputation Techniques with Boston Data')
ax.set_xlim(left=np.min(mse) * 0.9,right=np.max(mse) * 1.1)
ax.set_yticks(np.arange(len(mse)))
ax.set_xlabel('MSE')
ax.set_yticklabels(x_labels)
plt.show()
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關鍵? 在循環(huán)神經(jīng)網(wǎng)絡(RNN)家族中,長短期記憶網(wǎng)絡(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預測分析中的應用:從數(shù)據(jù)查詢到趨勢預判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應對策略? 長短期記憶網(wǎng)絡(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調(diào)研數(shù)據(jù)中的深度應用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎 ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03