鱼C论坛

 找回密码
 立即注册
查看: 1609|回复: 4

[技术交流] 机器学习系列------随机森林算法

[复制链接]
发表于 2018-6-22 09:40:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        随机森林是个非常好用的算法,原理就是把许多个决策树执行后选择一个最好的结果,下面还是把昨天有用的代码复制过来:
  1. from sklearn.datasets import make_moons
  2. from sklearn.model_selection import StratifiedShuffleSplit
  3. from sklearn.model_selection import StratifiedShuffleSplit

  4. X,y=make_moons(n_samples=500, shuffle=True, noise=0.3, random_state=42)

  5. split=StratifiedShuffleSplit(n_splits=1,test_size=0.2,random_state=42)
  6. for train_index,test_index in split.split(X,y):
  7.     X_train=X[train_index]
  8.     X_test=X[test_index]
  9.     y_train=y[train_index]
  10.     y_test=y[test_index]
复制代码

        我们先做一个随机森林模型:
  1. from sklearn.ensemble import RandomForestClassifier

  2. rnd_clf=RandomForestClassifier(n_estimators=500,max_leaf_nodes=16,n_jobs=-1)
  3. rnd_clf.fit(X_train,y_train)
  4. y_pred_rf=rnd_clf.predict(X_test)
复制代码

        这里面参数的含义是:用500棵决策树,每棵树最大分出来的树叶16个,最后一个参数n_jobs就是利用我们电脑最大的CUP内核数,比如我的电脑是8核的,就是用8个核来达到最快运算速度。底下这段代码就跟上面的原理是一样的,可作为参考:
  1. from sklearn.ensemble import BaggingClassifier
  2. from sklearn.tree import DecisionTreeClassifier

  3. bag_clf=BaggingClassifier(
  4.     DecisionTreeClassifier(splitter="random",max_leaf_nodes=16),n_estimators=500,
  5.     max_samples=1.0,bootstrap=True,n_jobs=-1
  6. )
复制代码

        然后还有一种随机森林的写法,代码如下:
  1. from sklearn.ensemble import ExtraTreesClassifier

  2. etr_clf=ExtraTreesClassifier(n_estimators=500,max_leaf_nodes=16,n_jobs=-1)
  3. etr_clf.fit(X_train,y_train)
  4. etr_clf.predict(X_test)
复制代码

        用这以上2种都可以,不分优劣。随机森林的最大好处是还可以帮我们预测数据里的哪种特征有用,代码如下:
  1. from sklearn.datasets import load_iris

  2. iris=load_iris()
  3. rnd_clf=RandomForestClassifier(n_estimators=500,n_jobs=-1)
  4. rnd_clf.fit(iris["data"],iris["target"])
  5. for name,score in zip(iris["feature_names"],rnd_clf.feature_importances_):
  6.     print(name,score)
复制代码

        输出为:
sepal length (cm) 0.0962354787155
sepal width (cm) 0.0245017888138
petal length (cm) 0.450381280478
petal width (cm) 0.428881451992
        以上这个数据还是鸢尾花,通过结果可以看到petal length ,petal width(花瓣的长和宽)这两种特征的重要性比较高,其他两种(花萼)比较没用,当我们训练时就可以只挑有用的数据来训练模型。
        还有一种叫做提升算法,今天简单介绍一下,这种算法也是一种综合的算法,就是好几种算法的综合体,代码如下:
  1. from sklearn.ensemble import AdaBoostClassifier

  2. ada_clf=AdaBoostClassifier(
  3.     DecisionTreeClassifier(max_depth=1),n_estimators=200,
  4.     algorithm="SAMME.R",learning_rate=0.5
  5. )
  6. ada_clf.fit(X_train,y_train)
复制代码

        这个算法比我们以前学习的bagging算法有优势,它是在每个循环可以判断集成的这些算法预测的得分,选取最高得分的算法来使用,这样即节省时间又提高准确度,以上代码就是综合使用了200棵决策树。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-22 10:41:52 | 显示全部楼层
帮顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-22 17:23:46 | 显示全部楼层
这个随机算法是算什么的。。0.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-22 17:30:00 | 显示全部楼层
鑫宇 发表于 2018-11-22 17:23
这个随机算法是算什么的。。0.0

我这是一个淘贴系列,你从头往后看就明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-22 17:43:25 | 显示全部楼层
alltolove 发表于 2018-11-22 17:30
我这是一个淘贴系列,你从头往后看就明白了

嗯呢,拭目以待
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 21:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表