基于Bagging和boosting算法 1---随机森林
程序员文章站
2024-03-22 09:03:16
...
bagging的特征:随机有放回的抽样;用随机森林做决策不能选择最优属性,只能选择随机属性。
随机森林的基分类器是决策树;随机森林不能用最佳属性做节点选择,随机选择;k决定属性的个数,在k个属性中选择最优的;—这种方式可以防止每次取最优,但是k不能等于整个属性集。
cart是用基尼指数衡量的,也可以用信息熵。cart造随机森林的时候是没有剪枝的。
不剪枝意味调参数
随机森林缺点:可解释性差;容易发生过拟合;
随机森林代码:参考https://scikit-learn.org/stable/
森林和决策树进行对比
工具
sklearn.model_selection.GridSearchCV.
参考网上randomforest代码,随机森林一般分也能达到90左右。
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
df = pd.read_csv('car.csv', encoding='gbk')
x_train, x_test, y_train, y_test = train_test_split(
df.values[:, :-1], df.values[:, -1], test_size=0.3, random_state=100)
def compareRFandDT():
rf_param = {'n_estimator': range(1,100), 'max_features': ['sqrt', 'log2']} #网格搜索,调参中很重要的一个数据
gs1 = GridSearchCV(RandomForestClassifier(),
param_grid=rf_param, cv=3)
# rf = RandomForestClassifier()
dt = DecisionTreeClassifier()
# rf_param.fit(x_train,y_train)
# rf.fit(x_train, y_train)
gs1.fit(x_train, y_train)
print('rf score train:',gs1.score(x_train,y_train))
print('rf score test:', gs1.score(x_test, y_test))
print('gs best score:',gs1.best_score_)
print('gs best param:',gs1.best_params_)
print('dt score train:', dt.score(x_train, y_train))
print('dt score:',dt.score(x_test,y_test))
if __name__ == "__main__":
compareRFandDT()