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)

这段代码实现了一个简单的随机森林分类器。

代码解释:

  1. make_classification 函数: 用于生成一个用于分类的数据集,包含9个特征('特征1'~'特征9'),1000个样本,并设置类别为-1和1。
  2. rfc: 实现了随机森林分类器。
    • __init__ 方法: 初始化随机森林的大小和随机种子。
    • fit 方法: 训练随机森林模型。
      • 创建多个决策树分类器,每个决策树使用随机选择的特征子集和样本子集进行训练。
      • 使用随机样本权重来增加随机性。
    • predict 方法: 使用训练好的随机森林模型进行预测。
      • 每个决策树对输入样本进行预测,并将所有决策树的预测结果进行平均,得到最终的预测结果。

使用示例:

# 创建随机森林分类器
clf = rfc(n_estimators=100, random_state=0)
# 训练模型
clf.fit(X, y)
# 预测新样本
y_pred = clf.predict(X)
Python从零实现随机森林算法

原文地址: https://www.cveoy.top/t/topic/f1fP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录