马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
随机森林是个非常好用的算法,原理就是把许多个决策树执行后选择一个最好的结果,下面还是把昨天有用的代码复制过来:from sklearn.datasets import make_moons
from sklearn.model_selection import StratifiedShuffleSplit
from sklearn.model_selection import StratifiedShuffleSplit
X,y=make_moons(n_samples=500, shuffle=True, noise=0.3, random_state=42)
split=StratifiedShuffleSplit(n_splits=1,test_size=0.2,random_state=42)
for train_index,test_index in split.split(X,y):
X_train=X[train_index]
X_test=X[test_index]
y_train=y[train_index]
y_test=y[test_index]
我们先做一个随机森林模型:from sklearn.ensemble import RandomForestClassifier
rnd_clf=RandomForestClassifier(n_estimators=500,max_leaf_nodes=16,n_jobs=-1)
rnd_clf.fit(X_train,y_train)
y_pred_rf=rnd_clf.predict(X_test)
这里面参数的含义是:用500棵决策树,每棵树最大分出来的树叶16个,最后一个参数n_jobs就是利用我们电脑最大的CUP内核数,比如我的电脑是8核的,就是用8个核来达到最快运算速度。底下这段代码就跟上面的原理是一样的,可作为参考:from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
bag_clf=BaggingClassifier(
DecisionTreeClassifier(splitter="random",max_leaf_nodes=16),n_estimators=500,
max_samples=1.0,bootstrap=True,n_jobs=-1
)
然后还有一种随机森林的写法,代码如下:from sklearn.ensemble import ExtraTreesClassifier
etr_clf=ExtraTreesClassifier(n_estimators=500,max_leaf_nodes=16,n_jobs=-1)
etr_clf.fit(X_train,y_train)
etr_clf.predict(X_test)
用这以上2种都可以,不分优劣。随机森林的最大好处是还可以帮我们预测数据里的哪种特征有用,代码如下:from sklearn.datasets import load_iris
iris=load_iris()
rnd_clf=RandomForestClassifier(n_estimators=500,n_jobs=-1)
rnd_clf.fit(iris["data"],iris["target"])
for name,score in zip(iris["feature_names"],rnd_clf.feature_importances_):
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(花瓣的长和宽)这两种特征的重要性比较高,其他两种(花萼)比较没用,当我们训练时就可以只挑有用的数据来训练模型。
还有一种叫做提升算法,今天简单介绍一下,这种算法也是一种综合的算法,就是好几种算法的综合体,代码如下:from sklearn.ensemble import AdaBoostClassifier
ada_clf=AdaBoostClassifier(
DecisionTreeClassifier(max_depth=1),n_estimators=200,
algorithm="SAMME.R",learning_rate=0.5
)
ada_clf.fit(X_train,y_train)
这个算法比我们以前学习的bagging算法有优势,它是在每个循环可以判断集成的这些算法预测的得分,选取最高得分的算法来使用,这样即节省时间又提高准确度,以上代码就是综合使用了200棵决策树。 |