Catboosting实现美国人口收入预计

本人是第一次写CSDN博客,这个编译器不是很熟悉,有很多不规范的情况,请见谅,学校某课程的大作业,要求美国人口收入预计准确率尽可能的高,测试集准确率达到了87.69,这里的准确率是我调节了参数,代码中的参数并不能得出这个准确率,但是也超过了百分之87,这是我对比了GBDT和XGB后觉得CAT具有更快的运行速度和准确率,因此选用了Catboosting:

文件 格式在这里插入图片描述

混淆矩阵:
在这里插入图片描述
ROC曲线即及准确率:
准确率如上
由于本人比较菜,部分库函数调用的代码写法是借鉴了网上的代码,在数据预处理方面,查阅了网上很多方法都需要丢掉‘education’和‘fnlwgt’两例,在其他的方法中可以提升准确率,但是在cat中发现并没有明显提升,但是代码中加入了这个预处理方法,方便读者后续使用其他方法时可以方遍一点,对于缺失值采用了众数操作,离散数据进行了重编码。

代码片段

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import metrics
from catboost import  CatBoostClassifier
from sklearn.metrics import confusion_matrix
#导入文件的目录,读者只需要换成自己的文件目录即可
adult_train = pd.read_excel(r'E:\python_project\hmework_machine-learning\dataset\adult_train.xlsx')
adult_test = pd.read_excel(r'E:\python_project\hmework_machine-learning\dataset\adult_test.xlsx')
adult_train.fillna(value = {'workclass':adult_train.workclass.mode()[0],
                              'occupation':adult_train.occupation.mode()[0],
                              'native-country':adult_train['native-country'].mode()[0]}, inplace = True)
adult_test.fillna(value = {'workclass':adult_train.workclass.mode()[0],
                              'occupation':adult_train.occupation.mode()[0],
                              'native-country':adult_train['native-country'].mode()[0]}, inplace = True)
# 离散变量的重编码
for feature in adult_train.columns:
    if adult_train[feature].dtype == 'object':
        adult_train[feature] = pd.Categorical(adult_train[feature]).codes
for feature in adult_test.columns:
    if adult_test[feature].dtype == 'object':
        adult_test[feature] = pd.Categorical(adult_test[feature]).codes
X_train=adult_train.iloc[:, 0:-1]
y_train=adult_train.iloc[:,-1]
X_test=adult_test.iloc[:, 0:-1]
y_test=adult_test.iloc[:,-1]
X_train.reset_index(inplace=False)
X_test.reset_index(inplace=False)
adult_train.drop(['education','fnlwgt'], axis = 1, inplace = True)
adult_test.drop(['education','fnlwgt'], axis = 1, inplace = True)
def cross_table(x,y):
    plt.figure(figsize=(8, 8), dpi=150)
    cm = confusion_matrix(x,y)
    labels = ['0', '1']
    sns.heatmap(cm.T, square=True, annot=True, fmt='d', edgecolor='b',cmap=plt.cm.Blues,xticklabels=labels,yticklabels=labels)
    plt.title('Normalized confusion matrix')
    plt.axis('scaled')
    plt.ylabel('True label')
    plt.xlabel('Predicted label')
    plt.show()
 categorical_features_indices = np.where(X_train.dtypes != np.float)[0]
model = CatBoostClassifier(iterations=1000, depth=8,cat_features=categorical_features_indices,learning_rate=0.2, loss_function='Logloss',
                            logging_level='Verbose')
model.fit(X_train,y_train,eval_set=(X_test, y_test),plot=True)
# 预测值
y_pred = model.predict(X_test)
y_pred_train = model.predict(X_train)
# 真实值 赋值
y_true = y_test
y_true_train=y_train
cross_table(y_pred,y_test)
str="train_accurancy: %.4g" % metrics.accuracy_score(y_true_train, y_pred_train)+"test_accurancy : %.4g" % metrics.accuracy_score(y_true, y_pred)
# 计算ROC曲线的x轴和y轴数据
fpr, tpr, _ = metrics.roc_curve(y_test, model.predict_proba(X_test)[:,1])
# 绘制ROC曲线
plt.plot(fpr, tpr, linestyle = 'solid', color = 'red')
# 添加阴影
plt.stackplot(fpr, tpr, color = 'steelblue')
# 绘制参考线
plt.plot([0,1],[0,1], linestyle = 'dashed', color = 'black')
# 往图中添加文本
plt.text(0.6,0.4,'AUC=%.3f' % metrics.auc(fpr,tpr), fontdict = dict(size = 18))
plt.title(str)
plt.show()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值