
來源:數據STUDIO
作者:云朵君
所有的參數,屬性與接口,全部和隨機森林分類器一致。僅有的不同就是回歸樹與分類樹的不同,不純度的指標, 參數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
回歸樹衡量分枝質量的指標,支持的標準有三種
其中是樣本數量,i是每一個數據樣本,是模型回歸出的數值,是樣本點i實際的數值標簽。所以MSE的本質是樣本真實數據與回歸結果的差異。在回歸樹中,MSE不只是我們的分枝質量衡量指標,也是我們最常用的衡量回歸樹回歸質量的指標,當我們在使用交叉驗證,或者其他方式獲取回歸樹的結果時,我們往往選擇均方誤差作為我們的評估(在分類樹中這個指標是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
數據準備
以波?頓數據集為例,導?完整的數據集并探索
dataset = load_boston()
dataset.data.shape #總共506*13=6578個數據 X, y = dataset.data, dataset.target
n_samples = X.shape[0]
n_features = X.shape[1]
生產缺失值
rng = np.random.RandomState(0) missing_rate = 0.5 n_missing_samples = int(np.floor(n_samples * n_features * missing_rate)) #np.floor向下取整,返回.0格式的浮點數
所有數據要隨機遍布在數據集的各?各列當中,??個缺失的數據會需要?個?索引和?個列索引如果能夠創造?個數組,包含3289個分布在0~506中間的?索引,和3289個分布在0~13之間的列索引,那我們就可以利?索引來為數據中的任意3289個位置賦空值。
我們現在采樣3289個數據,遠遠超過樣本量506,所以使?隨機抽取的函數randint。但如果需要的數據量?于我們的樣本量506,那我們可以采?np.random.choice來抽樣,choice會隨機抽取不重復的隨機數,因此可以幫助我們讓數據更加分散,確保數據不會集中在?些?中。
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) # 轉換成DataFrame是為了后續?便各種操作, # 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)
隨機森林填補
使?隨機森林回歸填補缺失值任何回歸都是從特征矩陣中學習,然后求解連續型標簽y的過程,之所以能夠實現這個過程,是因為回歸算法認為,特征矩陣和標簽之前存在著某種聯系。實際上,標簽和特征是可以相互轉換的,?如說,在?個"?地區,環境,附近學校數量"預測"房價"的問題中,我們既可以?"地區","環境","附近學校數量"的數據來預測"房價",也可以反過來,?"環境","附近學校數量"和"房價"來預測"地區"。?回歸填補缺失值,正是利?了這種思想。
對于?個有n個特征的數據來說,其中特征T有缺失值,我們就把特征T當作標簽,其他的n-1個特征和原本的標簽組成新的特征矩陣。那對于T來說,它沒有缺失的部分,就是我們的Y_test,這部分數據既有標簽也有特征,?它缺失的部分,只有特征沒有標簽,就是我們需要預測的部分。
特征T不缺失的值對應的其他n-1個特征 + 本來的標簽:X_train
特征T不缺失的值:Y_train
特征T缺失的值對應的其他n-1個特征 + 本來的標簽:X_test
特征T缺失的值:未知,我們需要預測的Y_test
這種做法,對于某?個特征?量缺失,其他特征卻很完整的情況,?常適?。
那如果數據中除了特征T之外,其他特征也有缺失值怎么辦?答案是遍歷所有的特征,從缺失最少的開始進?填補(因為填補缺失最少的特征所需要的準確信息最少)。填補?個特征時,先將其他特征的缺失值?0代替,每完成?次回歸預測,就將預測值放到原本的特征矩陣中,再繼續填補下?個特征。每?次填補完畢,有缺失值的特征會減少?個,所以每次循環后,需要?0來填補的特征就越來越少。當進?到最后?個特征時(這個特征應該是所有特征中缺失值最多的),已經沒有任何的其他特征需要?0來進?填補了,?我們已經使?回歸為其他特征填補了?量有效信息,可以?來填補缺失最多的特征。遍歷所有的特征后,數據就完整,不再有缺失值了。
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
建模
#對所有數據進?建模,取得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()
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24