使用python+sklearn實現使用完全隨機樹進行哈希特徵轉換

2021-02-08 機器學習算法與知識圖譜

RandomTreesEmbedding提供了一種將數據映射到非常高維的稀疏表示的方法,這對分類是有提升的作用。該映射是無監督且非常有效的。

本示例將幾棵樹給定的分區(partitions)進行可視化,並說明了如何將變換也用於非線性降維或非線性分類。相鄰的點通常共享同一棵樹的葉子節點,因此也共享其哈希表示特徵的大部分信息,這樣就可以簡單地基於截斷SVD(truncated SVD)的轉換數據的主要成分來分離兩個同心圓。在高維空間中,線性分類器通常表現很好。對於稀疏的二分類數據,BernoulliNB特別適合。下圖中最下面一行對BernoulliNB在變換後的空間中學到的決策邊界與ExtraTreesClassifier森林在原始數據中學到的決策邊界進行比較。sphx_glr_plot_random_forest_embedding_001

import numpy as np
import matplotlib.pyplot as plt

from sklearn.datasets import make_circles
from sklearn.ensemble import RandomTreesEmbedding, ExtraTreesClassifier
from sklearn.decomposition import TruncatedSVD
from sklearn.naive_bayes import BernoulliNB

# 構建一個綜合數據集
X, y = make_circles(factor=0.5, random_state=0, noise=0.05)

# 使用RandomTreesEmbedding轉換後的數據
hasher = RandomTreesEmbedding(n_estimators=10, random_state=0, max_depth=3)
X_transformed = hasher.fit_transform(X)

# 可視化使用截斷SVD(truncated SVD)降維後的結果
svd = TruncatedSVD(n_components=2)
X_reduced = svd.fit_transform(X_transformed)

# 在轉換後的數據上學習一個樸素貝葉斯分類器
nb = BernoulliNB()
nb.fit(X_transformed, y)


# 學習ExtraTreesClassifier用於比較
trees = ExtraTreesClassifier(max_depth=3, n_estimators=10, random_state=0)
trees.fit(X, y)


# 原始數據和精簡數據的散點圖
fig = plt.figure(figsize=(9, 8))

ax = plt.subplot(221)
ax.scatter(X[:, 0], X[:, 1], c=y, s=50, edgecolor='k')
ax.set_title("Original Data (2d)")
ax.set_xticks(())
ax.set_yticks(())

ax = plt.subplot(222)
ax.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y, s=50, edgecolor='k')
ax.set_title("Truncated SVD reduction (2d) of transformed data (%dd)" %
             X_transformed.shape[1])
ax.set_xticks(())
ax.set_yticks(())

# 在原始空間中繪製決策。 為此,我們為
# 網格[x_min,x_max] x [y_min,y_max]中的每個點分配一種顏色。
h = .01
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

# 使用RandomTreesEmbedding變換網格
transformed_grid = hasher.transform(np.c_[xx.ravel(), yy.ravel()])
y_grid_pred = nb.predict_proba(transformed_grid)[:, 1]

ax = plt.subplot(223)
ax.set_title("Naive Bayes on Transformed data")
ax.pcolormesh(xx, yy, y_grid_pred.reshape(xx.shape))
ax.scatter(X[:, 0], X[:, 1], c=y, s=50, edgecolor='k')
ax.set_ylim(-1.4, 1.4)
ax.set_xlim(-1.4, 1.4)
ax.set_xticks(())
ax.set_yticks(())

# 使用ExtraTreesClassifier變換網格
y_grid_pred = trees.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1]

ax = plt.subplot(224)
ax.set_title("ExtraTrees predictions")
ax.pcolormesh(xx, yy, y_grid_pred.reshape(xx.shape))
ax.scatter(X[:, 0], X[:, 1], c=y, s=50, edgecolor='k')
ax.set_ylim(-1.4, 1.4)
ax.set_xlim(-1.4, 1.4)
ax.set_xticks(())
ax.set_yticks(())

plt.tight_layout()
plt.show()

下載Python原始碼:plot_random_forest_embedding.py下載Jupyter notebook原始碼:plot_random_forest_embedding.ipynb

由Sphinx-Gallery生成的畫廊

☆☆☆為方便大家查閱,小編已將scikit-learn學習路線專欄文章統一整理到公眾號底部菜單欄,同步更新中,關注公眾號,點擊左下方「系列文章」,如圖:歡迎大家和我一起沿著scikit-learn文檔這條路線,一起鞏固機器學習算法基礎。(添加微信:mthler,備註:sklearn學習,一起進【sklearn機器學習進步群】開啟打怪升級的學習之旅。)

相關焦點

  • 特徵工程總結:R與python的比較實現
    當然,網絡上對特徵工程的總結已經非常成熟了(詳見jasonfreak的知乎問答:使用sklearn做單機特徵工程<https://www.zhihu.com/question/29316149>。但本人將依據python代碼的實習,總結用R來實現,以方便對特徵工程全面的總結和理解。
  • Python+sklearn隨機森林算法使用入門
    ==============隨機森林是一種集成學習方法,基本思想是把幾棵不同參數的決策樹(參考:Python+sklearn決策樹算法使用入門)打包到一起,每棵決策樹單獨進行預測,然後計算所有決策樹預測結果的平均值(適用於回歸分析)或所有決策樹「投票」得到最終結果(適用於分類)。
  • 使用sklearn隨機森林算法實現手寫數字識別
    ,他們也會根據你的情況與掌握的信息作出一系列的決策,做個形象的比喻,他們就是一棵棵單獨存在的決策樹,最終你根據這些結果決定接受還是拒絕offer,前一種情況你自己做出接受還是拒絕offer就叫決策樹算法,後面一種情況,你一個人拿不定主意,還會隨機問你周圍的幾個朋友一起給你參謀,最終做出接受還是拒絕offer的決定方式,你的那些朋友也是一棵棵單獨存在的決策樹,他們合在一起做決定,這個就叫做隨機森林
  • 使用python+sklearn實現度量和評分
    scoring=ftwo_scorer, cv=5)第二個用法是使用make_scorer,從一個簡單的python函數構建一個完全自定義的評分對象,該函數可以接收多個參數:您想使用的python函數(下面的示例中的my_custom_loss_func )您的python函數返回分數(greater_is_better=True默認值)還是損失(loss)(greater_is_better
  • 獨家 | 使用Python實現機器學習特徵選擇的4種方法(附代碼)
    當我們訓練分類器(如決策樹)時,我們計算每個參數以創建分割;我們可以使用這個度量作為特徵選擇器。讓我們來詳細了解一下。隨機森林由於其相對較好的準確性、魯棒性和易用性而成為最受歡迎的機器學習方法之一。它們還提供了兩種簡單易行的特徵選擇方法——均值降低雜質和均值降低準確度。隨機森林由許多決策樹組成。
  • 推薦 :使用Python實現機器學習特徵選擇的4種方法(附代碼)
    當我們訓練分類器(如決策樹)時,我們計算每個參數以創建分割;我們可以使用這個度量作為特徵選擇器。讓我們來詳細了解一下。隨機森林由於其相對較好的準確性、魯棒性和易用性而成為最受歡迎的機器學習方法之一。它們還提供了兩種簡單易行的特徵選擇方法——均值降低雜質和均值降低準確度。隨機森林由許多決策樹組成。
  • python實現隨機森林
    所以隨機森林是基於多顆決策樹的一種集成學習算法,常見的決策樹算法主要有以下幾種:1. ID3:使用信息增益g(D,A)進行特徵選擇2. C4.5:信息增益率 =g(D,A)/H(A)3. CART:基尼係數一個特徵的信息增益(或信息增益率,或基尼係數)越大,表明特徵對樣本的熵的減少能力更強,這個特徵使得數據由不確定性到確定性的能力越強。
  • 使用python+sklearn實現估計器的調參方法
    有關使用pipeline.Pipeline實例的帶分類器(這裡是一個使用彈性網(elastic net)和L2懲罰項的SGD訓練的線性支持向量機)的文本文檔特徵提取器(n-gram計數矢量器(count vectorizer)和TF-IDF轉換器)的網格搜索耦合參數示例,請參見文本特徵提取和評估的示例管道。有關在iris數據集上交叉驗證循環內網格搜索的示例,請參嵌套交叉驗證與非嵌套交叉驗證。
  • 使用python+sklearn實現在鳶尾花數據集上繪製集成樹的決策面
    繪製在鳶尾花數據集上一對特徵訓練的集成樹的決策面。
  • 使用python+sklearn實現交叉驗證
    在scikit-learn中,可以使用train_test_split函數快速將數據集隨機分成訓練集和測試集。為了解決這個問題,可以將數據集的另一部分作為「驗證集(validation set)」:在訓練集上進行訓練,然後對驗證集進行評估,當實驗效果達到最佳時,對測試集進行最終評估。然而,通過將可用數據劃分為三組,我們大大減少了可用於學習模型的樣本數,並且結果可以依賴於(訓練集,驗證集)對的隨機選擇。解決這個問題的方法是一個稱為交叉驗證(cross-validation)(簡稱CV)的過程。
  • 機器學習之特徵工程Feature-Engineering及sklearn代碼實現
    那麼做好特徵工程,就非常有利於我們得到一個「更好的」模型;在機器學習的整個過程中特徵工程佔用了70~80%的時間,其完成質量也直接影響模型最終的輸出結果。就特徵工程的流程、類型、工具、數據預處理、特徵選擇、降維在學習之餘,做簡單的總結和介紹、附可執行的python代碼。
  • 使用python+sklearn實現單變量特徵選擇
    本文我們將噪聲(無信息)特徵會添加到鳶尾花(iris)數據中,並應用單變量特徵選擇。對於每個特徵,我們繪製單變量特徵選擇的p值以及SVM的相應權重。我們可以看到單變量特徵選擇會選擇有信息的特徵,並且這些特徵具有較大的SVM權重。在全部特徵中,只有前四個是有意義的。我們可以看到它們在單變量特徵選擇時得分最高。SVM會為這些特徵分配較大的權重,但會選擇許多其它無信息的特徵。
  • python分類-決策樹
    信息增益越大,意味使用某幾個屬性來進行分裂節點創建子節點所獲得的純度提升越大。    信息增益比=信息增益/分裂前熵。信息增益率越高,說明分裂的效果越好。其中pi表示第i個類的數量容易得知,基尼係數越大,純度越低,即從樣本空間隨機選取兩個樣本時這兩個樣本所屬類別不一樣的概率越大。
  • 獨家 | 決策樹VS隨機森林——應該使用哪種算法?(附代碼&連結)
    決策樹簡介隨機森林概覽隨機森林和決策樹的衝突(代碼)為什麼隨機森林優於決策樹?決策樹vs隨機森林——你應該在何時選擇何種算法?決策樹是一種有監督的機器學習算法,該方法可以用於解決分類和回歸問題。決策樹可以簡單地理解為達到某一特定結果的一系列決策。這裡是一幅決策樹的闡述圖(使用我們上面的案例):
  • 使用python+sklearn實現多任務Lasso的聯合特徵選擇
    多任務Lasso允許同時解決多個回歸問題,從而使所選特徵在各個任務之間保持相同。
  • 使用python+sklearn實現在20newgroups上進行多類稀疏邏輯回歸
    newgroups20 數據集文檔進行分類。在這裡,我們使用 l1 稀疏(l1 sparsity)將無信息特徵的權重調整為零。如果目標是提取每個班級的強判別詞彙,那麼這是一個很好的方法。如果目標是獲得最佳的預測準確性,則最好改用非稀疏誘導l2懲罰(non sparsity-inducing l2 penalty)。
  • sklearn學習(三):決策樹
    決策樹的訓練與預測        訓練階段:從給定的訓練集構造出來一個樹(從根節點開始選擇特徵,如何進行特徵切分)。        測試階段:根據構造出來的樹模型從上到下走一遍就好了。#一旦構建好了決策樹,分類和預測任務就相當簡單了關鍵在於如何去構建一個表現好的樹。
  • GBDT原理及利用GBDT構造新的特徵-Python實現
    wd=Facebook&tn=24004469_oem_dg&rsv_dl=gh_pl_sl_csd    在預測Facebook廣告點擊中,使用一種將決策樹與邏輯回歸結合在一起的模型,其優於其他方法,超過3%。主要思想:GBDT每棵樹的路徑直接作為LR輸入特徵使用。
  • 隨機森林算法入門(Python)
    隨機森林能夠用於分類和回歸問題,可以處理大量特徵,並能夠幫助估計用於建模數據變量的重要性。這篇文章是關於如何使用Python構建隨機森林模型。隨機森林可以用於幾乎任何一種預測問題(包括非線性問題)。它是一個相對較新的機器學習策略(90年代誕生于貝爾實驗室)可以用在任何方面。它屬於機器學習中的集成學習這一大類。
  • 使用sklearn輕鬆實現數據縮放
    數據準備的過程主要包括3個步驟:本文會告訴你兩種方法,即如何使用Python的Scikit-Learn庫進行簡單的數據轉換。一、數據縮放 你的預處理數據集中可能包含各種各樣、不同比例的特徵欄位,比如美元、千克、價格,有的特徵列數值範圍在100以內,有的卻達到幾百萬,差異很大。很多機器學習模型不希望有這樣大的差異,如果數據集各個屬性之間的數值差異越小,則模型表現的會越好。