数据挖掘 —— 金融数据(三)

task3
用逻辑回归、svm和决策树;随机森林和XGBoost进行模型构建,评分方式任意,如准确率等。(不需要考虑模型调参)

# 导入库
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier

from sklearn.model_selection import RandomizedSearchCV,cross_val_predict
from scipy.stats import uniform
from sklearn import metrics
from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,roc_auc_score,roc_curve
import matplotlib.pyplot as plt
# 获取进行特征选择后的数据集
import pandas as pd
data = pd.read_csv('task2_proc.csv')
x = data.iloc[:,:-1]
y = data.iloc[:,-1]
print('feature shape:{}, label shape:{}'.format(x.shape,y.shape))
feature shape:(4455, 50), label shape:(4455,)
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.3,random_state=2018)

# 对训练数据集进行标准化处理
scaler = StandardScaler()
x_train_standard = scaler.fit_transform(x_train)
x_test_standard = scaler.fit_transform(x_test)
def get_scores(y_train, y_test, y_train_predict, y_test_predict, y_train_proba, y_test_proba):
    train_accuracy = metrics.accuracy_score(y_train, y_train_predict)
    test_accuracy = metrics.accuracy_score(y_test, y_test_predict)
    # 精准率
    train_precision = metrics.precision_score(y_train, y_train_predict)
    test_precision = metrics.precision_score(y_test, y_test_predict)
    # 召回率
    train_recall = metrics.recall_score(y_train, y_train_predict)
    test_recall = metrics.recall_score(y_test, y_test_predict)
    # F1-score
    train_f1_score = metrics.f1_score(y_train, y_train_predict)
    test_f1_score = metrics.f1_score(y_test, y_test_predict)
    # AUC
    train_auc = metrics.roc_auc_score(y_train, y_train_proba)
    test_auc = metrics.roc_auc_score(y_test, y_test_proba)
    # ROC
    train_fprs, train_tprs, train_thresholds = metrics.roc_curve(y_train, y_train_proba)
    test_fprs, test_tprs, test_thresholds = metrics.roc_curve(y_test, y_test_proba)
    plt.plot(train_fprs, train_tprs)
    plt.plot(test_fprs, test_tprs)
    plt.title("ROC Curve")
    plt.xlabel("FPR")
    plt.ylabel("TPR")
    plt.show()
    # 输出评分
    print("训练集准确率:", train_accuracy)
    print("测试集准确率:", test_accuracy)
    print("训练集精准率:", train_precision)
    print("测试集精准率:", test_precision)
    print("训练集召回率:", train_recall)
    print("测试集召回率:", test_recall)
    print("训练集F1-score:", train_f1_score)
    print("测试集F1-score:", test_f1_score)
    print("训练集AUC:", train_auc)
    print("测试集AUC:", test_auc)
    return test_auc
auc = []
# 逻辑回归
lr = LogisticRegression(random_state=2018)
lr.fit(x_train_standard, y_train)
y_train_predict = lr.predict(x_train_standard)
y_test_predict = lr.predict(x_test_standard)
y_train_proba = lr.predict_proba(x_train_standard)[:, 1]
y_test_proba = lr.predict_proba(x_test_standard)[:, 1]
test_auc = get_scores(y_train, y_test, y_train_predict, y_test_predict, y_train_proba, y_test_proba)
auc.append(test_auc)

在这里插入图片描述

训练集准确率: 0.79826812059
测试集准确率: 0.791323859387
训练集精准率: 0.711055276382
测试集精准率: 0.624309392265
训练集召回率: 0.355081555834
测试集召回率: 0.348765432099
训练集F1-score: 0.473640167364
测试集F1-score: 0.447524752475
训练集AUC: 0.806606203682
测试集AUC: 0.79632981122
# SVM
svm_linearSVC = LinearSVC(random_state=2018)
svm_linearSVC.fit(x_train_standard, y_train)
y_train_predict = svm_linearSVC.predict(x_train_standard)
y_test_predict = svm_linearSVC.predict(x_test_standard)
y_train_proba = svm_linearSVC.decision_function(x_train_standard)
y_test_proba = svm_linearSVC.decision_function(x_test_standard)
test_auc = get_scores(y_train, y_test, y_train_predict, y_test_predict, y_train_proba, y_test_proba)
auc.append(test_auc)
auc

[外链图片转存失败(img-VjptlBgp-1565527934036)(output_7_0.png)]

训练集准确率: 0.79826812059
测试集准确率: 0.791323859387
训练集精准率: 0.737288135593
测试集精准率: 0.622950819672
训练集召回率: 0.32747804266
测试集召回率: 0.351851851852
训练集F1-score: 0.453518679409
测试集F1-score: 0.449704142012
训练集AUC: 0.807375460649
测试集AUC: 0.789623779752





[0.79632981121957758, 0.78962377975211129]
tree = DecisionTreeClassifier(random_state=2018)
tree.fit(x_train_standard, y_train)
y_train_predict = tree.predict(x_train_standard)
y_test_predict = tree.predict(x_test_standard)
y_train_proba = tree.predict_proba(x_train_standard)[:, 1]
y_test_proba = tree.predict_proba(x_test_standard)[:, 1]
test_auc = get_scores(y_train, y_test, y_train_predict, y_test_predict, y_train_proba, y_test_proba)
auc.append(test_auc)
auc

[外链图片转存失败(img-AXPbxwOG-1565527934037)(output_8_0.png)]

训练集准确率: 1.0
测试集准确率: 0.70531039641
训练集精准率: 1.0
测试集精准率: 0.404371584699
训练集召回率: 1.0
测试集召回率: 0.456790123457
训练集F1-score: 1.0
测试集F1-score: 0.428985507246
训练集AUC: 1.0
测试集AUC: 0.620793877128





[0.79632981121957758,
 0.78962377975211129,
 0.62079387712819767,
 0.62079387712819767]
# 随机森林
rf = RandomForestClassifier(n_estimators=100, oob_score=True, random_state=2018)
rf.fit(x_train_standard, y_train)
y_train_predict = rf.predict(x_train_standard)
y_test_predict = rf.predict(x_test_standard)
y_train_proba = rf.predict_proba(x_train_standard)[:, 1]
y_test_proba = rf.predict_proba(x_test_standard)[:, 1]
test_auc = get_scores(y_train, y_test, y_train_predict, y_test_predict, y_train_proba, y_test_proba)
auc.append(test_auc)
auc

[外链图片转存失败(img-nASykZM5-1565527934037)(output_9_0.png)]

训练集准确率: 1.0
测试集准确率: 0.799551234106
训练集精准率: 1.0
测试集精准率: 0.712121212121
训练集召回率: 1.0
测试集召回率: 0.29012345679
训练集F1-score: 1.0
测试集F1-score: 0.412280701754
训练集AUC: 1.0
测试集AUC: 0.7818071856





[0.79632981121957758,
 0.78962377975211129,
 0.62079387712819767,
 0.62079387712819767,
 0.78180718559955142]
# XGboost
xgb = XGBClassifier(random_state=2018)
xgb.fit(x_train_standard, y_train)
y_train_predict = xgb.predict(x_train_standard)
y_test_predict = xgb.predict(x_test_standard)
y_train_proba = xgb.predict_proba(x_train_standard)[:, 1]
y_test_proba = xgb.predict_proba(x_test_standard)[:, 1]
test_auc = get_scores(y_train, y_test, y_train_predict, y_test_predict, y_train_proba, y_test_proba)
auc.append(test_auc)
auc

[外链图片转存失败(img-rCNbu3HM-1565527934038)(output_10_0.png)]

训练集准确率: 0.846375881976
测试集准确率: 0.806282722513
训练集精准率: 0.842672413793
测试集精准率: 0.707006369427
训练集召回率: 0.490589711418
测试集召回率: 0.342592592593
训练集F1-score: 0.620142743854
测试集F1-score: 0.461538461538
训练集AUC: 0.909125506734
测试集AUC: 0.812420021206





[0.79632981121957758,
 0.78962377975211129,
 0.62079387712819767,
 0.62079387712819767,
 0.78180718559955142,
 0.81242002120580592]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值