Python从零实现随机森林算法
from sklearn.datasets import make_classification
# 生成包含9个特征,1000个样本的二分类数据集
X, y = make_classification(n_features=9, n_informative=9, n_redundant=0, n_samples=1000, n_classes=2, random_state=0)
y[y == 0] = -1
import numpy as np
from sklearn.tree import DecisionTreeClassifier
class rfc:
'''
随机森林分类器
'''
def __init__(self, n_estimators=100, random_state=0):
# 随机森林中决策树的数量
self.n_estimators = n_estimators
# 随机森林的随机种子
self.random_state = random_state
def fit(self, X, y):
'''
随机森林分类器拟合
'''
# 获取所有类别
self.y_classes = np.unique(y)
# 存储决策树的列表
dts = []
# 样本数量
n = X.shape[0]
# 初始化随机数生成器
rs = np.random.RandomState(self.random_state)
# 训练每一棵决策树
for i in range(self.n_estimators):
# 创建决策树分类器,设置随机种子和最大特征数
dt = DecisionTreeClassifier(random_state=rs.randint(np.iinfo(np.int32).max), max_features='auto')
# 生成随机样本权重
sample_weight = np.bincount(rs.randint(0, n, n), minlength=n)
# 使用随机样本权重拟合决策树
dt.fit(X, y, sample_weight=sample_weight)
# 将训练好的决策树添加到列表中
dts.append(dt)
# 保存所有决策树
self.trees = dts
def predict(self, X):
'''
随机森林分类器预测
'''
# 初始化预测结果数组
probas = np.zeros((X.shape[0], len(self.y_classes)))
# 遍历所有决策树进行预测
for i in range(self.n_estimators):
# 获取当前决策树
dt = self.trees[i]
# 预测每个样本属于每个类别的概率
probas += dt.predict_proba(X)
# 计算平均概率
probas /= self.n_estimators
# 返回预测结果
return self.y_classes.take(np.argmax(probas, axis=1), axis=0)
这段代码实现了一个简单的随机森林分类器。
代码解释:
make_classification函数: 用于生成一个用于分类的数据集,包含9个特征('特征1'~'特征9'),1000个样本,并设置类别为-1和1。rfc类: 实现了随机森林分类器。__init__方法: 初始化随机森林的大小和随机种子。fit方法: 训练随机森林模型。- 创建多个决策树分类器,每个决策树使用随机选择的特征子集和样本子集进行训练。
- 使用随机样本权重来增加随机性。
predict方法: 使用训练好的随机森林模型进行预测。- 每个决策树对输入样本进行预测,并将所有决策树的预测结果进行平均,得到最终的预测结果。
使用示例:
# 创建随机森林分类器
clf = rfc(n_estimators=100, random_state=0)
# 训练模型
clf.fit(X, y)
# 预测新样本
y_pred = clf.predict(X)
原文地址: https://www.cveoy.top/t/topic/f1fP 著作权归作者所有。请勿转载和采集!