日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

随机森林做特征重要性排序和特征选择

發(fā)布時間:2023/12/15 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 随机森林做特征重要性排序和特征选择 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

隨機森林模型介紹:

隨機森林模型不僅在預測問題上有著廣泛的應用,在特征選擇中也有常用。

隨機森林是以決策樹為基學習器的集成學習算法。隨機森林非常簡單,易于實現(xiàn),計算開銷也很小,更令人驚奇的是它在分類和回歸上表現(xiàn)出了十分驚人的性能。
隨機森林模型在擬合數(shù)據(jù)后,會對數(shù)據(jù)屬性列,有一個變量重要性的度量,在sklearn中即為隨機森林模型的 feature_importances_ 參數(shù),這個參數(shù)返回一個numpy數(shù)組對象,對應為隨機森林模型認為訓練特征的重要程度,float類型,和為1,特征重要性度數(shù)組中,數(shù)值越大的屬性列對于預測的準確性更加重要。


隨機森林(RF)簡介:

只要了解決策樹的算法,那么隨機森林是相當容易理解的。隨機森林的算法可以用如下幾個步驟概括:

  • 1、用有抽樣放回的方法(bugging)從樣本集中選取n個樣本作為一個訓練集
  • 2、用抽樣得到的樣本集生成一棵決策樹。在生成數(shù)的每一個結(jié)點:
    • 1、隨機不重復地選擇d個特征
    • 2、利用這d個特征分別對樣本集進行劃分,找到最佳的劃分特征(可用基尼系數(shù)(CART數(shù))、增益率(C4.5)或者信息增益(ID3)判別)
  • 3、重復步驟1到步驟2共k次,k即為隨機森林中決策樹的個數(shù)。
  • 4、用訓練得到的隨機森林對測試樣本進行預測,并用票選法決定預測的結(jié)果。
    下圖比較直觀地展示了隨機森林算法:

隨機森林的隨機性體現(xiàn)在:

  • 選取樣本時 有放回的隨機選取。
    會導致不同的樹,分別學到整體數(shù)據(jù)集的一部分特征,最終大家投票,得到最終的預測結(jié)果。

sklearn提供前剪枝技術。個人解讀,

  • 1.隨機森林已經(jīng)通過隨機選擇樣本和特征,保證了隨機性,不用后剪枝應該也能避免過擬合

  • 2.后剪枝是為了避免過擬合,隨機森林隨機選擇變量與樹的數(shù)量,已經(jīng)避免了過擬合,沒必要去后剪枝了。

  • 3.一般rf要控制的是樹的規(guī)模,而不是樹的置信度,后剪枝的作用其實被集成方法消解了,所以用處不大。

特征重要性評估:

sklearn 已經(jīng)幫我們封裝好了一切。

1、 以UCI上葡萄酒的例子為例,首先導入數(shù)據(jù)集。
數(shù)據(jù)集介紹:數(shù)據(jù)集
特征:

  • Alcohol
  • Malic acid
  • Ash
  • Alcalinity of ash
  • Magnesium
  • Total phenols
  • Flavanoids
  • Nonflavanoid phenols
  • Proanthocyanins
  • Color intensity
  • Hue
  • OD280/OD315 of diluted wines
  • Proline
  • # 導入數(shù)據(jù) import pandas as pd url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data' df = pd.read_csv(url, header = None) df.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash', 'Alcalinity of ash', 'Magnesium', 'Total phenols', 'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', 'Color intensity', 'Hue', 'OD280/OD315 of diluted wines', 'Proline']

    2、數(shù)據(jù)初探

    #初看數(shù)據(jù) df.head(5)

    # 標簽類別 set(df['Class label']) #{1, 2, 3} df.shape # (178, 14) # 統(tǒng)計缺失值 df.isna().sum()

    df.describe()


    可見除去class label之外共有13個特征,數(shù)據(jù)集的大小為178。無缺失值。

    3、 建模
    將數(shù)據(jù)集分為訓練集和測試集。

    from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier x = df.iloc[:, 1:].values y = df.iloc[:, 0].values

    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0) feat_labels = df.columns[1:] forest = RandomForestClassifier(n_estimators=10000, random_state=0, n_jobs=-1,max_depth=3) forest.fit(x_train, y_train) score = forest.score(x_test, y_test) # score=0.98148 forest.feature_importances_

    importances = forest.feature_importances_ indices = np.argsort(importances)[::-1] # 下標排序 for f in range(x_train.shape[1]): # x_train.shape[1]=13print("%2d) %-*s %f" % \(f + 1, 30, feat_labels[indices[f]], importances[indices[f]]))


    4、設置特征選擇閾值:

    threshold = 0.15 x_selected = x_train[:, importances > threshold] x_selected.shape #(124, 3)

    查看選擇的特征具體情況。

    x_selected_columns = feat_labels[importances > threshold]

    Index([‘Flavanoids’, ‘Color intensity’, ‘Proline’], dtype=‘object’)

    說明僅僅選擇了’Flavanoids’, ‘Color intensity’, 'Proline’3列。

    import pandas as pd x_select_pd = pd.DataFrame(x_selected,columns=x_selected_columns) x_select_pd


    特征選擇完畢。


    產(chǎn)出:

    在做特征選擇是特性工程最后一步,一般先進行相關性分,消除兩兩變量的線性相關性,然后再進行隨機森林進行重要特征的篩選。

    總結(jié)

    以上是生活随笔為你收集整理的随机森林做特征重要性排序和特征选择的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。