【阿里天池-医学影像报告异常检测】4 机器学习模型调参

简介: 本文提供了对医学影像报告异常检测任务中使用的机器学习模型(如XGBoost和LightGBM)进行参数调整的方法,并分享了特征提取和模型调优的最佳实践。

引言

(1)先对idtdf提取特征的ngram大小和feature调参,最终ngram=(1,2)feature=500,最佳
(2)对LogisticRegression、XGBClassifier、LGBMClassifier三个模型单独调参,本人仅仅对XGB的几个参数进行了调整,工作量太庞大,就没有所有参数调整对比分析。这里仅仅提出调参的例子,提供模型调参的思路学习
(3)开源源码https://github.com/823316627bandeng/TIANCHI-2021-AI-Compition

实现

(1)导入包

import os
import numpy as np
import pandas as pd
from sklearn.decomposition import NMF, TruncatedSVD, PCA
from sklearn.linear_model import LogisticRegression
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import StandardScaler
from xgboost import XGBClassifier
from utils import *
from lightgbm import LGBMClassifier
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import roc_auc_score
#加载数据
label= np.array(pd.read_csv('./data/label.csv'))
train = pd.read_csv('./temp/train.csv',header = None,names=['id','text','label'])
adjust_model()

(2)模型的调参

def adjust_model():
    Tdf = TfidfVectorizer(ngram_range=(1,2),max_features=500)
    tdf_data = Tdf.fit_transform(train['text'])
    X_train,X_test,y_train,y_test = train_test_split(tdf_data,label,test_size=0.3)
    paralist = []
    score_dict = {"list_n":[],"list_f":[],"loss":[]}
    # for n in paralist
    param_test1 = {'estimator__max_depth':range(2,8,2)}
    '''
    model = OneVsRestClassifier(XGBClassifier(eval_metric= 'mlogloss',
                                            max_depth = 11,
                                            min_child_weight =1,
                                            use_label_encoder=False,
                                            learning_rate =0.01,
                                            n_estimators=150,
                                            gamma=0,
                                            subsample=0.8,
                                            colsample_bytree=0.8,
                                            nthread=100,
                                            scale_pos_weight=1,
                                            seed=27,
                                            verbose=True
                                            ))
    '''
    '''
    model = OneVsRestClassifier(LGBMClassifier(is_unbalance = True,
                                                metric = 'binary_logloss,auc',
                                                # max_depth = 6,
                                                num_leaves = 40,
                                                learning_rate = 0.1,
                                                feature_fraction = 0.7,
                                                min_child_samples=21,
                                                min_child_weight=0.001,
                                                bagging_fraction = 1,
                                                bagging_freq = 2,
                                                reg_alpha = 0.001,
                                                reg_lambda = 8,
                                                cat_smooth = 0,
                                                # num_iterations = 200
                                                ))
    '''
    # model = OneVsRestClassifier(LGBMClassifier())
    model = OneVsRestClassifier(XGBClassifier(eval_metric= 'mlogloss',use_label_encoder=False,n_estimators=150))
    model.fit(X_train, y_train)

    predict = model.predict_proba(X_test)
    score = roc_auc_score(y_test,predict)
    print(score)

XGB
{‘estimator__max_depth’: 9, ‘estimator__min_child_weight’: 1}
{‘estimator__max_depth’: 11}0.9812110365828264
{‘estimator__n_estimators’: 150} 0.9834881407453535
调参后:0.9726861215062805
LGB
{‘estimator__max_depth’: 6}最佳得分 0.9811430144134826

(3)idtdf提取特征调参

#list_ngram = [1,2,3,4]
#list_feature = [100,200,300,400]
def adjust_idtdf():
    list_ngram = [1,2,3,4,5]
    list_feature = [100,200,300,400,500]
    #分数记录字典
    score_dict = {"list_n":[],"list_f":[],"loss":[]}
    #创建方法进行验证
    def para_Tdf(data_x):
        for n in list_ngram:
            for fea in list_feature:
                Tdf = TfidfVectorizer(ngram_range=(1,n),max_features=fea)
                tdf_data = Tdf.fit_transform(data_x)
                # tdf_data = tdf_data.toarray()
                X_train,X_test,y_train,y_test = train_test_split(tdf_data,label,test_size=0.3)
                model = OneVsRestClassifier(XGBClassifier(eval_metric= 'mlogloss',use_label_encoder=False,n_estimators=50))
                model.fit(X_train, y_train)
                predict = model.predict_proba(X_test)
                loss = Mutilogloss(y_test,predict)
                score_dict["list_n"].append(n)
                score_dict['list_f'].append(fea)
                score_dict['loss'].append(loss)
                print("n={0},feature={1},loss={2}".format(n,fea,loss))
    #方法调用
    para_Tdf(train['text'])
    #以DataFrame形式显示分数
    print(score_dict)

最佳是n=2,features = 500
n=1,feature=100,loss=0.09694388171340544
n=1,feature=200,loss=0.07941648607131963
n=1,feature=300,loss=0.0780516995282797
n=1,feature=400,loss=0.07654529189186797
n=1,feature=500,loss=0.07875673493941672
n=2,feature=100,loss=0.10700796997032506
n=2,feature=200,loss=0.0872626769884241
n=2,feature=300,loss=0.08134605319231948
n=2,feature=400,loss=0.07927331816025636
n=2,feature=500,loss=0.07391725763363112
n=3,feature=100,loss=0.10642417486808319
n=3,feature=200,loss=0.0932806660865527
n=3,feature=300,loss=0.0821267581008504
n=3,feature=400,loss=0.08258777666414407
n=3,feature=500,loss=0.07525704598697901
n=4,feature=100,loss=0.10395870861632356
n=4,feature=200,loss=0.09252871191998951
n=4,feature=300,loss=0.08208295772650118
n=4,feature=400,loss=0.08249975725295985
n=4,feature=500,loss=0.07920155662551372
n=5,feature=100,loss=0.10649166642764825
n=5,feature=200,loss=0.09238465463657325
n=5,feature=300,loss=0.08104836900458223
n=5,feature=400,loss=0.07833574743241475
n=5,feature=500,loss=0.07796380784547806

目录
相关文章
|
9月前
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
1351 109
|
10月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
月之暗面发布开源模型Kimi K2,采用MoE架构,参数达1T,激活参数32B,具备强代码能力及Agent任务处理优势。在编程、工具调用、数学推理测试中表现优异。阿里云PAI-Model Gallery已支持云端部署,提供企业级方案。
562 0
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
|
人工智能 JSON 算法
【解决方案】DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
DistilQwen 系列是阿里云人工智能平台 PAI 推出的蒸馏语言模型系列,包括 DistilQwen2、DistilQwen2.5、DistilQwen2.5-R1 等。本文详细介绍DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践。
|
人工智能 运维 API
PAI-Model Gallery云上一键部署阶跃星辰新模型Step1X-Edit
4月27日,阶跃星辰正式发布并开源图像编辑大模型 Step1X-Edit,性能达到开源 SOTA。Step1X-Edit模型总参数量为19B,实现 MLLM 与 DiT 的深度融合,在编辑精度与图像保真度上实现大幅提升,具备语义精准解析、身份一致性保持、高精度区域级控制三项关键能力;支持文字替换、风格迁移等11 类高频图像编辑任务类型。在最新发布的图像编辑基准 GEdit-Bench 中,Step1X-Edit 在语义一致性、图像质量与综合得分三项指标上全面领先现有开源模型,比肩 GPT-4o 与 Gemin。PAI-ModelGallery 支持Step1X-Edit一键部署方案。
|
11月前
|
机器学习/深度学习 算法 安全
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
本文探讨在敏感数据上应用差分隐私(DP)进行机器学习的挑战与实践。通过模拟DP-SGD算法,在模型训练中注入噪声以保护个人隐私。实验表明,该方法在保持71%准确率和0.79 AUC的同时,具备良好泛化能力,但也带来少数类预测精度下降的问题。研究强调差分隐私应作为模型设计的核心考量,而非事后补救,并提出在参数调优、扰动策略选择和隐私预算管理等方面的优化路径。
700 3
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
|
10月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署gpt-oss系列模型
阿里云 PAI-Model Gallery 已同步接入 gpt-oss 系列模型,提供企业级部署方案。
|
11月前
|
机器学习/深度学习 人工智能 算法
Post-Training on PAI (4):模型微调SFT、DPO、GRPO
阿里云人工智能平台 PAI 提供了完整的模型微调产品能力,支持 监督微调(SFT)、偏好对齐(DPO)、强化学习微调(GRPO) 等业界常用模型微调训练方式。根据客户需求及代码能力层级,分别提供了 PAI-Model Gallery 一键微调、PAI-DSW Notebook 编程微调、PAI-DLC 容器化任务微调的全套产品功能。
|
12月前
|
存储 人工智能 运维
企业级MLOps落地:基于PAI-Studio构建自动化模型迭代流水线
本文深入解析MLOps落地的核心挑战与解决方案,涵盖技术断层分析、PAI-Studio平台选型、自动化流水线设计及实战构建,全面提升模型迭代效率与稳定性。
538 6
|
12月前
|
存储 机器学习/深度学习 自然语言处理
避坑指南:PAI-DLC分布式训练BERT模型的3大性能优化策略
本文基于电商搜索场景下的BERT-Large模型训练优化实践,针对数据供给、通信效率与计算资源利用率三大瓶颈,提出异步IO流水线、梯度压缩+拓扑感知、算子融合+混合精度等策略。实测在128卡V100集群上训练速度提升3.2倍,GPU利用率提升至89.3%,训练成本降低70%。适用于大规模分布式深度学习任务的性能调优。
554 3

热门文章

最新文章