13161216443

您所在位置: 首頁> 學習課程> python培訓學校 | Python快速實戰機器學習(8) 隨機森林

python培訓學校 | Python快速實戰機器學習(8) 隨機森林

發布百知教育 來源:學習課程 2019-12-09

隨機森林(random forest)是之前我們學習的決策樹的集成,因此我們用森林來稱呼。隨機森林的思想也不復雜,但是表現卻非常好。


通過這一課,您將會:


1、認識隨機森林;

2、學會使用sklearn操作隨機森林;

3、明白隨機森林和神經網絡的應用區別。


隨機森林


如果說我們怕一棵決策樹有“偏見”,那么就可以通過建造一個森林,這個森林是由一棵棵決策樹組成的,然后我們給每顆決策樹棵“隨機”分配數據去訓練。最后綜合整個森林的結果來做判斷,從而達到在決策樹的基礎上進一步提高算法表現的目的。


隨機森林算法大致分為4個步驟:

通過自助法(bootstrap)構建大小為n的一個訓練集,即重復抽樣選擇n個訓練樣例

對于剛才新得到的訓練集,構建一棵決策樹。在每個節點執行操作:通過不重復抽樣選擇d個特征;利用上面的d個特征,選擇某種度量分割節點

重復步驟1和2,k次

對于每一個測試樣例,對k顆決策樹的預測結果進行投票。票數最多的結果就是隨機森林的預測結果。

在訓練時,隨機森林中的每棵樹都會從數據點的隨機樣本中學習。樣本被有放回的抽樣,稱為自助抽樣法(bootstrapping),這意味著一些樣本將在一棵樹中被多次使用。背后的想法是在不同樣本上訓練每棵樹,盡管每棵樹相對于特定訓練數據集可能具有高方差,但總體而言,整個森林將具有較低的方差,同時不以增加偏差為代價。


在實際運用隨機森林模型時,樹的數目(k)需要好好調參。一般,k越大,隨機森林的性能越好,當然計算成本也越高。

樣本大小n能夠控制bias-variance平衡,如果n很大,我們就減小了隨機性因此隨機森林就容易過擬合。另一方面,如果n很小,雖然不會過擬合,但模型的性能會降低。


隨機森林的優點:


優秀的分類表現


擴展性


使用簡單


代碼實現


我們繼續使用sklearn來實現隨機森林:






















































from matplotlib.colors import ListedColormapimport matplotlib.pyplot as pltimport warnings

def versiontuple(v):    return tuple(map(int, (v.split("."))))

def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):
   # setup marker generator and color map    markers = ('s', 'x', 'o', '^', 'v')    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')    cmap = ListedColormap(colors[:len(np.unique(y))])
   # plot the decision surface    x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1    x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),                           np.arange(x2_min, x2_max, resolution))    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)    Z = Z.reshape(xx1.shape)    plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)    plt.xlim(xx1.min(), xx1.max())    plt.ylim(xx2.min(), xx2.max())
   for idx, cl in enumerate(np.unique(y)):        plt.scatter(x=X[y == cl, 0],                    y=X[y == cl, 1],                    alpha=0.6,                    c=cmap(idx),                    edgecolor='black',                    marker=markers[idx],                    label=cl)
   # highlight test samples    if test_idx:        # plot all samples        if not versiontuple(np.__version__) >= versiontuple('1.9.0'):            X_test, y_test = X[list(test_idx), :], y[list(test_idx)]            warnings.warn('Please update to NumPy 1.9.0 or newer')        else:            X_test, y_test = X[test_idx, :], y[test_idx]
       plt.scatter(X_test[:, 0],                    X_test[:, 1],                    c='',                    alpha=1.0,                    edgecolor='black',                    linewidths=1,                    marker='o',                    s=55, label='test set')



from sklearn import datasetsimport numpy as np
iris = datasets.load_iris()X = iris.data[:, [2, 3]]y = iris.target

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.3, random_state=0)
X_combined = np.vstack((X_train, X_test))y_combined = np.hstack((y_train, y_test))

from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(criterion='entropy',                                n_estimators=10,                                random_state=1,                                n_jobs=2)forest.fit(X_train, y_train)
plot_decision_regions(X_combined, y_combined,                      classifier=forest, test_idx=range(105, 150))
plt.xlabel('petal length [cm]')plt.ylabel('petal width [cm]')plt.legend(loc='upper left')plt.tight_layout()# plt.savefig('./figures/random_forest.png', dpi=300)plt.show()


運行結果:


python培訓班


對比隨機森林和神經網絡


神經網絡比其他兩種方法好主要是這幾年深度學習成功應用在了圖像識別和語音識別等方面,如果學習任務是做用戶興趣偏好分類,訂單預測等隨機森林(random forest)模型(尤其是xgboost)會有極為優越的表現,可以看看kaggle的競賽,很多冠軍采用的依然是樹模型。


python培訓班:http://www.onhairsalon.com/python2019


注釋:本文內容來自公眾號Python與機器學習之路

上一篇:大數據培訓班 | 數字孿生技術都能解決哪些問題?

下一篇:應屆生去公司找個Java程序員的職位需要什么技能?

相關推薦

www.onhairsalon.com

有位老師想和您聊一聊

關閉

立即申請