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)
        # 创建n_estimators个决策树
        for i in range(self.n_estimators):
            # 创建决策树分类器
            dt = DecisionTreeClassifier(random_state=rs.randint(np.iinfo(np.int32).max), max_features = 'auto')
            # 根据随机生成的权重,拟合数据集
            dt.fit(X, y, sample_weight=np.bincount(rs.randint(0, n, n), minlength = n))
            # 将拟合好的决策树添加到决策树数组
            dts.append(dt)
        # 将决策树数组赋值给模型属性trees
        self.trees = dts
            
    def predict(self, X):
        '''
        随机森林分类器预测
        '''
        # 预测结果数组
        probas = np.zeros((X.shape[0], len(self.y_classes)))
        # 对所有决策树进行预测并对预测值概率进行平均
        for i in range(self.n_estimators):
            # 获取第i个决策树
            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行:导入numpy库,numpy是python中常用的数值计算库。
# - 第2行:导入sklearn.tree库中的DecisionTreeClassifier类,决策树分类器。
# - 第4-11行:定义随机森林分类器类,包含初始化、拟合和预测方法。
# - 第6-7行:初始化方法,包含两个参数,n_estimators表示随机森林中决策树的数量,默认为100;random_state表示随机种子,用于生成随机数,保证每次生成随机数的结果一致,默认为0。
# - 第13-25行:拟合方法,包含两个参数,X表示训练集的特征矩阵,y表示训练集的分类标签。首先获取分类标签的唯一值,然后创建一个空的决策树数组,接着获取样本数量n和随机数生成器rs。接下来,创建n_estimators个决策树,将拟合好的决策树添加到决策树数组中。最后将决策树数组赋值给模型属性trees。
# - 第27-38行:预测方法,包含一个参数X,表示测试集的特征矩阵。首先创建一个预测结果数组probas,大小为测试集样本数量×分类标签数量,初始值都为0。然后对所有决策树进行预测并对预测值概率进行平均,最后返回预测结果。对所有决策树进行预测的过程中,首先获取第i个决策树,然后对测试集进行预测,返回预测概率值。对所有预测概率进行平均的方法是将所有预测概率相加,然后除以决策树数量。最后返回预测结果,取预测概率最大的分类标签。
Python 随机森林分类器实现:RFC 类

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

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