import numpy as npfrom sklearntree import DecisionTreeClassifierclass rfc 随机森林分类器 def __init__self n_estimators = 100 random_state = 0 # 随机森林的大小 selfn_estimators = n_es
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个决策树,然后对测试集进行预测,返回预测概率值。对所有预测概率进行平均的方法是将所有预测概率相加,然后除以决策树数量。最后返回预测结果,取预测概率最大的分类标签
原文地址: https://www.cveoy.top/t/topic/hnqZ 著作权归作者所有。请勿转载和采集!