Victor0321 发表于 2022-7-23 16:17:20

关于sklearn分类器里的fit的用法

这次我需要完成一个自己书写集成类学习的方法,但是由于bagging的方法需要生存n个分类器,所以需要训练n次麻。clf.fit(x_train,y_train) 我需要每次都生成一个新的分类器么? dt = DecisionTreeClassifier(**best_para_DT )
还是每次我只要在函数初始化的时候输入一个clf 然后只要不停的调用fit(x,y) 而不需要每次新生成 dt = DecisionTreeClassifier(**best_para_DT ) 就可以了


class Bagging_DT(object):
    '''
    算法步骤:
    1. 随机k次抽取m百分比数据
    2. 每次生成一个分类器,最终生成k个分类器
    3. 结果由k个分类器取平均值产生
    '''
    def __init__(self , k ,best_para ):
      self.k = k #int
      self.best_para = best_para # model 的实例对象,

    def fit(self, x, y):
      x = np.array(x)
      y = np.array(y)
      leg =len(x)
      self.clf_set = []
      for i in range(self.k):
            dt = DecisionTreeClassifier(**best_para_DT ) #将最好的参数输入
            rand_series = np.random.randint(leg, size = leg) #有放回的生成随机数
            dt.fit(x, y) #训练svm
            self.clf_set.append(dt) #训练好的svm模型放入

      return self.clf_set

    def predict(self,x):
      results = []
      x = np.array(x)
      for clf in self.clf_set:
            clf_result = clf.predict(x)
            results.append(clf_result)

      #结果返回的是平均值
      res_score = np.mean( np.array(results) , axis= 0)
      res_clf = res_score.copy() #返回的是平均值
      res_score= 1
      res_score= 0

      return res_score ,res_clf


# DT bagging 的实现
bag_DT = Bagging_DT(10000,best_para_DT)
model_DT = bag_DT.fit(x_train_DT , y_train_DT )
pred_DT , pred_score_DT =bag_DT.predict(x_val_DT)
scc_DT = accuracy_score(y_val_DT , pred_DT)
print(f"决策森林对应的正确率为{scc_DT:.3f}")
auc_DT = roc_auc_score (y_val_DT , pred_score_DT)
print(f"决策森林对应的auc为{auc_DT:.3f}")
页: [1]
查看完整版本: 关于sklearn分类器里的fit的用法