day3

导入包,并对数据集进行处理

import pandas as pd
from sklearn.metrics import precision_score,roc_auc_score
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score#这个就可以用评分函数了
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import roc_curve, auc
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
data_all=pd.read_csv(r'C:\Users\lxy\Desktop\input\data_all.csv')
from sklearn.model_selection import train_test_split
features=[x for x in data_all.columns if x not in ['status']]
x=data_all[features]
y=data_all['status']
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=2018)
scaler = StandardScaler()
scaler.fit(x_train)
x_train= scaler.transform(x_train)
x_test= scaler.transform(x_test)

评分函数

def scores(model,x_train,y_train,x_test,y_test):
    model_score=model.fit(x_train,y_train)
    test_predict=model_score.predict(x_test)
    if hasattr(model,'decision_function'):
        pre_test=model_score.decision_function(x_test)
    else:
        pre_test=model_score.predict_proba(x_test)[:,1]
    print("准确率",accuracy_score(y_test,test_predict))
    print("精确率",precision_score(y_test,test_predict))
    print("召回率",recall_score(y_test,test_predict))
    print("F1-score",f1_score(y_test,test_predict))
    print("AUC",roc_auc_score(y_test,pre_test))
    false_positive_rate,true_positive_rate,thresholds=roc_curve(y_test,pre_test)
    roc_auc=auc(false_positive_rate, true_positive_rate)
    plt.title('ROC')
    plt.plot(false_positive_rate, true_positive_rate,'b',label='AUC = %0.4f'% roc_auc)
    plt.legend(loc='lower right')
    plt.plot([0,1],[0,1],'r--')
    plt.ylabel('TPR')
    plt.xlabel('FPR')

逻辑回归

from sklearn.linear_model import LogisticRegression
lr =LogisticRegression(random_state=2018)
lr.fit(x_train,y_train)
scores(lr,x_train,y_train,x_test,y_test)
准确率 0.7876664330763841
精确率 0.6609195402298851
召回率 0.3203342618384401
F1-score 0.4315196998123827
AUC 0.7657428562486308

在这里插入图片描述
svm

from sklearn.svm import LinearSVC
svm=LinearSVC(random_state=2018)
scores(svm,x_train,y_train,x_test,y_test)
准确率 0.7813594954449895
精确率 0.6535947712418301
召回率 0.2785515320334262
F1-score 0.390625
AUC 0.7677954784931093

在这里插入图片描述

决策树

from sklearn.tree import DecisionTreeClassifier
tree=DecisionTreeClassifier(random_state=2018)
scores(tree,x_train,y_train,x_test,y_test)
准确率 0.6846531184302733
精确率 0.38242894056847543
召回率 0.41225626740947074
F1-score 0.3967828418230563
AUC 0.5942367479369453

在这里插入图片描述
随机森林

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=500,oob_score=True, random_state=2018)
scores(rf,x_train,y_train,x_test,y_test)
准确率 0.7841625788367204
精确率 0.6888888888888889
召回率 0.2590529247910863
F1-score 0.3765182186234817
AUC 0.760757357620523

在这里插入图片描述
GBDT

from sklearn.ensemble import GradientBoostingClassifier
gbdt=GradientBoostingClassifier(random_state=2018)
scores(gbdt,x_train,y_train,x_test,y_test)
准确率 0.7806587245970568
精确率 0.6116504854368932
召回率 0.35097493036211697
F1-score 0.44601769911504424
AUC 0.763794560420644

在这里插入图片描述
lightgbm

import lightgbm as lgb
lgb_model = lgb.LGBMClassifier(boosting_type='GBDT',random_state=2018)
scores(lgb_model,x_train,y_train,x_test,y_test)
准确率 0.7701471618780659
精确率 0.5701357466063348
召回率 0.35097493036211697
F1-score 0.43448275862068964
AUC 0.7574019592501017

在这里插入图片描述
xgboost

from xgboost.sklearn import XGBClassifier
xgbc = XGBClassifier(random_state=2018)
scores(xgbc,x_train,y_train,x_test,y_test)
准确率 0.7855641205325858
精确率 0.6305418719211823
召回率 0.3565459610027855
F1-score 0.4555160142348754
AUC 0.7713634419371329

在这里插入图片描述

代码中的一些学习内容:
1.roc_curve详解

在sklearn中,sklearn.metrics.roc_curve() 函数用于绘制ROC曲线。但是对于例子中如何得到返回值产生了疑惑,现在对于返回值的计算做一点解释。

主要参数:

y_true:真实的样本标签,默认为{0,1}或者{-1,1}。如果要设置为其它值,则 pos_label 参数要设置为特定值。例如要令样本标签为{1,2},其中2表示正样本,则pos_label=2。

y_score:对每个样本的预测结果。

pos_label:正样本的标签。

返回值的计算:

fpr:False positive rate。

tpr:True positive rate。

thresholds 阀值

2.数据没有归一化,结果lr和svm都跑不出来:

这里给出一点看法是:线性模型是否归一化直接影响模型的收敛,下面看图这是归一化后模型收敛可以看出相对平滑,迅速准确收敛
在这里插入图片描述

这是未归一化的,收敛曲折,有时还没收敛就终止了。所以试试把lr的阀值改为1e-6时,模型就收敛结果就正确了
在这里插入图片描述
许多学习算法中目标函数的基础例如(SVM的RBF内核或线性模型的l1和l2正则化)都是假设所有的特征都是零均值并且具有同一阶数上的方差。如果某个特征的方差比其他特征大几个数量级,那么它就会在学习算法中占据主导位置,导致学习器并不能像我们说期望的那样,从其他特征中学习。
逻辑回归如果你不用正则,那么,标准化并不是必须的,如果你用正则,那么标准化是必须的。为什么呢?因为不用正则时,我们的损失函数只是仅仅在度量预测与真实的差距,加上正则后,我们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小

3.评分
准确率(accuracy): (TP + TN )/( TP + FP + TN + FN)

精准率(precision):TP / (TP + FP),正确预测为正占全部预测为正的比例

召回率(recall): TP / (TP + FN),正确预测为正占全部正样本的比例

F-measure(f1-score):precision和recall调和均值的2倍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值