ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

模型训练及调参

2019-08-06 18:00:30  阅读:422  来源: 互联网

标签:auc 训练 调参 模型 train test import clf sklearn


1.模型选择

根据二分类问题进行模型训练

from sklearn.linear_model import LogisticRegression
import pandas as pd
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,roc_auc_score
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
from sklearn import metrics
from sklearn.model_selection import cross_val_score
from xgboost import XGBClassifier
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25,random_state=12)
classifiers = [
    KNeighborsClassifier(n_neighbors=5),
    LogisticRegression(),
    DecisionTreeClassifier(),
    RandomForestClassifier(),
    AdaBoostClassifier(),
    GradientBoostingClassifier(),
    XGBClassifier()]

# 计划用pandas的dataframe存放每一个模型的accuracy和AUC值,结果保存在result中
cols=["Classifier", "Accuracy", "AUC"]
result = pd.DataFrame(columns=cols)

# 对9个分类器模型循环处理,依次输出他们的accuracy和auc值,并它结果保存到result中
for clf in classifiers:
    clf.fit(X_train, y_train)
    name = clf.__class__.__name__
    
    print("="*30)
    print(name)
    
    print('****Results****')
    y_pred = clf.predict(X_test)
    acc = accuracy_score(y_test, y_pred)
    print("Accuracy: {:.2%}".format(acc))
    
    y_pred = clf.predict_proba(X_test)
    fpr, tpr, thresholds =roc_curve(y_test, y_pred[:,1])
    auc_value = auc(fpr, tpr)
    print("AUC: {0:0.2f}".format(auc_value))
    
    # 把当前循环的分类器模型结果保存在result_clf这个dataframe中
    result_clf = pd.DataFrame([[name, acc*100, auc_value]], columns=cols)
    
    # 把result_clf合并到result中
    result = result.append(result_clf)
    
print("="*30)

选择auc值最大的算法

2.调参

(1)网格搜索(GridSearchCV)

from sklearn.model_selection import GridSearchCV
n_estimators=[80,100]
learning_rate = [0.01, 0.1, 0.2, 0.3]
max_depth = [3,5,8]

# 搜索参数为字典
param_grid = dict(n_estimators=n_estimators,learning_rate=learning_rate,max_depth=max_depth)
clf = GridSearchCV(model, param_grid, scoring="roc_auc", cv=5)
clf.fit(X_train, y_train)

# 输出最佳学习率和其对应的分数
print("Best: %f using %s" % (clf.best_score_, clf.best_params_))

选取最佳参数训练模型

(2)自动化机器学习(tpot)

参考 https://blog.csdn.net/anshuai_aw1/article/details/82498947
https://blog.csdn.net/hgy0403/article/details/81291307

from tpot import TPOTClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
 
digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target,
                                                    train_size=0.75, test_size=0.25)
 
pipeline_optimizer = TPOTClassifier(generations=5, population_size=20, cv=5,
                                    random_state=42, verbosity=2)
pipeline_optimizer.fit(X_train, y_train)
print(pipeline_optimizer.score(X_test, y_test))
pipeline_optimizer.export('tpot_exported_pipeline.py')

例子

from tpot import TPOTClassifier
from sklearn.datasets import load_iris
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
 
iris = load_digits()
iris.data[0:5], iris.target
print iris
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target,
                                                    train_size=0.75, test_size=0.25)
X_train.shape, X_test.shape, y_train.shape, y_test.shape
 
tpot = TPOTClassifier(verbosity=2, max_time_mins=2,config_dict="TPOT light",population_size=10,mutation_rate=0.9,crossover_rate=0.1)
tpot.fit(X_train, y_train)
print(tpot.score(X_test, y_test))

3.模型训练

lr=LinearRegression()
lr.fit(X_train,y_train)
y_pred = clf.predict(X_test)
acc = accuracy_score(y_test, y_pred)
y_pred = clf.predict_proba(X_test)
fpr, tpr, thresholds =roc_curve(y_test, y_pred[:,1])
auc_value = auc(fpr, tpr)
print(acc,auc_value)

4.保存模型

from sklearn.externals import joblib
joblib.dump(model,'lr.model')

# 调用模型
xgb=joblib.load('l.model')

标签:auc,训练,调参,模型,train,test,import,clf,sklearn
来源: https://blog.csdn.net/MESSI_JAMES/article/details/98636236

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有