无规则采集器列表算法(机器学习中的随机森林算法(一)——Random)
优采云 发布时间: 2022-01-06 11:02无规则采集器列表算法(机器学习中的随机森林算法(一)——Random)
一、随机森林算法简介:
在机器学习中
在,随机森林是一个收录多个决策树的分类器
, 并且输出类别由个体树输出的类别的模式决定。Leo Breiman 和 Adele Cutler 开发了一种算法来推断随机森林。和“随机
“森林”是他们的商标。
这个术语是贝尔实验室的Tin Kam Ho在1995年提出的随机决策森林(random decision forest)。
森林)。这种方法结合了 Breimans 的“Bootstrap aggregating”思想和 Ho 的“randomsubspace”
方法”来构建决策树的集合。
每棵树都是根据以下算法构建的:
1. 用M表示训练案例(样本)的数量,用N表示特征的数量。
2. 输入特征数n,用于确定决策树
上一个节点的决策结果;其中 n 应该远小于 N。
3. 从M个训练案例(样本)中进行替换采样,取k次形成一个训练集
(即引导抽样),并使用未选择的用例(样本)进行预测并评估其错误。
4.对于每个节点,随机选择n个特征,基于这些特征确定每个节点在每棵决策树上的决策。根据这n个特征,计算出最佳分割方法。
5. 每棵树都会完全生长而无需修剪,可以在构建正常的树状分类器后使用。
6.最后测试数据,根据每棵树,以多胜少的方式确定分类。
在构建随机森林时,需要做两方面的工作:数据的随机选择和要选择的特征的随机选择,以消除过拟合的问题。
首先,从原创数据集中取一个有替换的样本,构造一个子数据集。子数据集的数据量与原创数据集的数据量相同。不同子数据集中的元素可以重复,同一子数据集中的元素也可以重复。其次,使用子数据集构建子决策树,将这些数据放入每个子决策树中,每个子决策树输出一个结果。最后,如果有新数据,需要通过随机森林得到分类结果,可以通过对子决策树的判断结果进行投票,得到随机森林的输出结果。如下图所示,假设有
3个子决策树,2个子树的分类结果为A类,1个子树的分类结果为B类,则随机森林的分类结果为A类。
与数据集的随机选择类似,随机森林中子树的每次分裂过程都没有使用所有的候选特征,而是从所有候选特征中随机选择某些特征,然后随机选择。从特征中选择最佳特征。这样可以使随机森林中的决策树互不相同,提高系统的多样性,从而提高分类性能。
优势:
随机森林既可以用于回归任务,也可以用于分类任务,很容易看出模型输入特征的相对重要性。随机森林算法被认为是一种非常方便和易于使用的算法,因为它是默认的超参数,通常会产生很好的预测结果。超参数的数量并不多,它们所代表的含义直观易懂。
随机森林有足够多的树,这样分类器就不会产生过度拟合的模型。
缺点:
由于使用了大量的树,算法变得很慢,无法实现实时预测。一般来说,这些算法训练速度快,预测速度慢。预测越准确,需要的树越多,这将导致模型越慢。在大多数实际应用中,随机森林算法足够快,但肯定会遇到对实时性要求高的情况,所以只能首选其他方法。当然,随机森林是一种预测建模工具,而不是一种描述性工具。换句话说,如果您正在寻找数据中关系的描述,建议您更喜欢其他方法。
适用范围:
随机森林算法可用于许多不同的领域,例如银行、股票市场、医药和电子商务。在银行领域,它通常用于检测比普通人更频繁地使用银行服务的客户,并及时偿还债务。同时,它也会被用来检测想要欺骗银行的客户。在金融领域,可以用来预测未来的股票走势。在医疗保健领域,可用于识别药物成分的正确组合,分析患者的病史以识别疾病。另外,在电子商务领域,随机森林可以用来判断客户是否真的喜欢一个产品。
二、 随机森林算法在sklearn中的应用示例:
(1)基本步骤:
①选择数据:将你的数据分成三组:训练数据、验证数据和测试数据
②模型数据:使用训练数据构建使用相关特征的模型
③验证模型:使用您的验证数据连接到您的模型
④测试模型:使用您的测试数据来检查验证模型的性能
⑤使用模型:使用完全训练好的模型对新数据进行预测
⑥ 调优模型:使用更多的数据、不同的特征或调整后的参数来提高算法的性能
为方便起见,代码如下:
导入 csv
导入 numpy asnp
fromsklearn.ensemble 导入 RandomForestRegressor
从 sklearnimport 预处理
从 sklearn.metricsimport mean_squared_error,explain_variance_score
importmatplotlib.pyplot 作为 plt
#------------------------------------------------- --------------------------------
defload_dataset(文件名):
file_reader = csv.reader(open(filename,'rb'), delimiter=',')
X, y = [], []
对于 file_reader 中的行:
X.append(row[2:13])
y.append(row[-1])
# 提取特征名称
特征名称 = np.array(X[0])
返回
np.array(X[1:]).astype(np.float32),np.array(y[1:]).astype(np.float32),
特征名称
if__name__=='__main__':
X, y, feature_names =load_dataset("d:\\bike_day.csv")
X, y = shuffle(X, y, random_state=7)
num_training = int(0.9 * len(X))
X_train, y_train = X[:num_training],y[:num_training]
X_test, y_test = X[num_training:],y[num_training:]
rf_regressor =RandomForestRegressor(n_estimators=1000, max_depth=10,
min_samples_split=1)
rf_regressor.fit(X_train, y_train)
y_pred = rf_regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
evs = 解释方差分数(y_test,y_pred)
来自 AdaBoostRegressor importplot_feature_importances
plot_feature_importances(rf_regressor.feature_importances_,'RandomForest
回归器',功能名称)
数据集格式如下:
即时,今天,季节,年,月,假期,工作日,工作日,天气,温度,温度,嗡嗡声,风速,休闲,注册,cnt
1,2011-01-01,1,0,1,0,6,0,2,0.344167,0.363625,0.805833,0.160446, 331,654,985
2,2011-01-02,1,0,1,0,0,0,2,0.363478,0.353739,0.696087,0.248539, 131,670,801
3,2011-01-03,1,0,1,0,1,1,1,0.196364,0.189405,0.437273,0.248309, 120,1229,1349
以下数据省略。