Python 随机森林分类器实现 - 9个特征矩阵
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=9)
# 根据随机生成的权重,拟合数据集
dt.fit(X, y, sample_weight=np.bincount(rs.randint(0, n, n), minlength=9))
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)
将代码修改为9个特征的矩阵需要修改以下几处:
1. 在类初始化方法中,不再设置max_features参数为“auto”,而是设置为9。
2. 在fit方法中,需要将每个决策树分类器拟合时的max_features参数设置为9。
3. 在fit方法中,需要将随机生成的权重的长度设置为9,即np.bincount(rs.randint(0, n, n), minlength=9)。
原文地址: https://www.cveoy.top/t/topic/oQeg 著作权归作者所有。请勿转载和采集!