直接使用主动学习

 查询样本,把数据集分80%训练集20%测试集,训练集80%有标记20%无标记,通过查询策略在无标记中选取样本放入有标记集中更新训练model
  def __init__instance_selection(self):
    """
    初始化一些参数
    """

    """===================================="""
    # 初始化中间变量,这里为了简便,很多参数直接给定了
    """===================================="""
    # 初始化工具箱
    self._tool = ap.ToolBox(X=self._X, y=self._Y, query_type='AllLabels', saving_path='.')
    # 初始化划分
    self._tool.split_AL(test_ratio=0.2, initial_label_rate=0.2, split_count=2)
    # 初始化模型,default model is 线性
    #self._model = self._tool.get_default_model()
    #self._model = GaussianNB()
    #self._model = svm.SVC()
    self._model = MLPClassifier(solver='lbfgs', alpha=1e-5,hidden_layer_sizes = (5, 2), random_state = 1)

    # 初始化停止标准
    self._criterion_stop = self._tool.get_stopping_criterion("num_of_queries", 8)
    # 初始化性能度量
    self._metric = "accuracy_score"
    self._performance = lambda Y, Y_pre: \
        self._tool.calc_performance_metric(Y, Y_pre, performance_metric=self._metric)
    # 初始化批次大小
    self._batch_size = 1
    # 初始化主循环次数
    self._loops = 5

def __loop(self, strategy_query, loop, *data):
    """
    每一轮的实验
    """
    # 获取划分结果
    idx_tr, idx_te, idx_lab, idx_unlab = data
    # 获取中间结果保存器
    saver = self._tool.get_stateio(loop)
    # 模型的首次训练,用的已有标记的训练集
    self._model.fit(X=self._X[idx_lab, :], y=self._Y[idx_lab.index])
    # 对测试集进行预测
    pred_te = self._model.predict(self._X[idx_te, :])
    # 获取准确率
    pred_acc = self._performance(self._Y[idx_te], pred_te)
    # 保存首次结果
    saver.set_initial_point(pred_acc)
    # 开始查询,当然停止标准自己给定也行,例如循环多少次之类的
    while not self._criterion_stop.is_stop():
        # 在无标签集中查询实例
        idx_query = strategy_query.select(label_index=idx_lab, unlabel_index=idx_unlab, batch_size=1)
        # 更新已有标签集合
        idx_lab.update(idx_query)
        # 删去无标签集中的已查询实例
        idx_unlab.difference_update(idx_query)
        # 使用更新后的有标签集训练模型
        self._model.fit(X=self._X[idx_lab, :], y=self._Y[idx_lab])
        pred_te = self._model.predict(self._X[idx_te, :])
        pred_acc = self._performance(self._Y[idx_te], pred_te)

        # 保存中间结果
        st = self._tool.State(select_index=idx_query, performance=pred_acc)
        saver.add_state(st)
        # 更新停止标准
        self._criterion_stop.update_information(saver)
    # 重设存储器
    self._criterion_stop.reset()
    return saver
最开始的实验.png

self._model = GaussianNB()


GaussianNB.png

self._model = svm.SVC()


1638416002(1).png

多层感知机
1638416869(1).png

1638428735(1).png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容