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

## 引言

（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
#加载数据


（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,
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

LGB
{‘estimator__max_depth’: 6}最佳得分 0.9811430144134826

（3）idtdf提取特征调参

#list_ngram = [1,2,3,4]
#list_feature = [100,200,300,400]
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=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

|
4天前
|

23 8
|
4天前
|

12 1
|
16天前
|

PAI-ChatLearn现已全面开源，助力用户快速、高效的Alignment训练体验。借助ChatLearn，用户可全身心投入于模型设计与效果优化，无需分心于底层技术细节。ChatLearn将承担起资源调度、数据传输、参数同步、分布式运行管理以及确保系统高效稳定运作的重任，为用户提供一站式解决方案。
79 10
|
12天前
|

R语言基础机器学习模型：深入探索决策树与随机森林
【9月更文挑战第2天】决策树和随机森林作为R语言中基础且强大的机器学习模型，各有其独特的优势和适用范围。了解并熟练掌握这两种模型，对于数据科学家和机器学习爱好者来说，无疑是一个重要的里程碑。希望本文能够帮助您更好地理解这两种模型，并在实际项目中灵活应用。
17 5
|
11天前
|

87 1
|
15天前
|

【8月更文挑战第30天】在PHP的世界中，面向对象编程（OOP）是一块基石，它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法，从类和对象的定义开始，到继承、多态性、封装等核心概念，再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码，一起见证PHP中OOP的魔力，并理解其背后的设计哲学。
28 5
|
14天前
|

【8月更文挑战第31天】将机器学习模型集成到Web应用中，可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库，提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器，并通过具体示例代码展示最佳实践。首先，需在HTML文件中引入TensorFlow.js库；接着，可通过加载预训练模型如MobileNet实现图像分类；然后，编写代码处理图像识别并显示结果；此外，还介绍了如何训练自定义模型及优化模型性能的方法，包括模型量化、剪枝和压缩等。
25 1
|
17天前
|

47 4
|
16天前
|

【8月更文挑战第29天】本文将带你走进人工智能的奇妙世界，一起探索如何从零开始构建一个机器学习模型。我们将一步步解析整个过程，包括数据收集、预处理、模型选择、训练和测试等步骤，让你对AI编程有一个全面而深入的理解。无论你是AI初学者，还是有一定基础的开发者，都能在这篇文章中找到你需要的信息和启示。让我们一起开启这段激动人心的AI编程之旅吧！ 【8月更文挑战第29天】在这篇文章中，我们将探索移动应用开发的奇妙世界。无论你是刚刚踏入这个领域的新手，还是已经有一定经验的开发者，这篇文章都将为你提供有价值的信息和指导。我们将从基础开始，逐步深入到更复杂的主题，包括移动操作系统的选择、开发工具的使用、
43 2
|
19天前
|

【8月更文挑战第26天】 机器学习，这个听起来既神秘又遥不可及的领域，实际上正悄然改变着我们的世界。从推荐系统到自动驾驶汽车，机器学习技术无处不在。本文将带你走进机器学习的世界，通过一个简单的Python代码示例，展示如何构建一个基本的线性回归模型来预测房价。不需要复杂的数学公式或深奥的理论，我们将以最直观的方式理解机器学习的核心概念。无论你是编程新手还是数据科学爱好者，这篇文章都将为你打开一扇新的大门，让你看到数据背后的力量。
33 3