python打卡DAY9

#注入必要库

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

import time

from sklearn.svm import SVC #支持向量机分类器

from sklearn.neighbors import KNeighborsClassifier #K近邻分类器

from sklearn.linear_model import LogisticRegression #逻辑回归分类器

import xgboost as xgb #XGBoost分类器

import lightgbm as lgb #LightGBM分类器

from sklearn.ensemble import RandomForestClassifier #随机森林分类器

from catboost import CatBoostClassifier #CatBoost分类器

from sklearn.tree import DecisionTreeClassifier #决策树分类器

from sklearn.naive_bayes import GaussianNB #高斯朴素贝叶斯分类器

from skopt import BayesSearchCV

from skopt.space import Integer

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 用于评估分类器性能的指标

from sklearn.metrics import classification_report, confusion_matrix #用于生成分类报告和混淆矩阵

import warnings #用于忽略警告信息

warnings.filterwarnings("ignore") # 忽略所有警告信息

data=pd.read_csv(r'data.csv')

#设置中文字体&负号正确显示&图幅

# plt.figure(figsize=(6,4))

plt.rcParams['font.sans-serif']=['Arial Unicode MS']

plt.rcParams['axes.unicode_minus']=True

plt.rcParams['figure.dpi']=100


 

# plt.figure(figsize=(6,4))

# sns.boxplot(x=data['Annual Income'])

# plt.title('annual income photo')

# plt.xlabel('annual income')

# plt.tight_layout()

# plt.show()

# plt.figure(figsize=(6,4))

# sns.boxplot(x=data['Annual Income'])

# plt.title('年收入箱线图')

# plt.xlabel('年收入')

# plt.tight_layout()

# plt.show()

# sns.boxplot(x='Credit Default',y='Annual Income',data=data)

# plt.title('annual income vs. credit default')

# plt.xlabel('credit default')

# plt.ylabel('annual income')

# plt.xticks([0,1],['否','是'])

# plt.tight_layout()

# plt.show()

# sns.histplot(x='Annual Income',

# hue='Credit Default',

# data=data,

# kde=True,

# element='bars',

# hue_order=[0, 1])

# plt.title('年收入表')

# plt.xlabel('年收入')

# plt.ylabel('数量')

# plt.legend(labels=['否','是'])

# plt.tight_layout()

# plt.show()

# data['Open Accounts Group']=pd.cut(data['Number of Open Accounts'],

# bins=[0,5,10,15,20,float('inf')],

# labels=['0-5','6-10','11-15','16-20','20+'])

# sns.countplot(x='Open Accounts Group',

# hue='Credit Default',

# data=data)

# plt.title('number')

# plt.xlabel('number of open account group')

# plt.ylabel('count')

# plt.legend(labels=['否','是'])

# plt.tight_layout()

# plt.show()



 

#查看信息

data=pd.read_csv(r'data.csv')

print(f'{data.info()}\n{data.isnull().sum()}\n{data.head()}')

#填补缺失值

for i in data.columns:

if data[i].dtype!='object':

if data[i].isnull().sum()>0:

data[i].fillna(data[i].mean(),inplace=True)

else:

if data[i].isnull().sum()>0:

data[i].fillna(data[i].mode()[0],inplace=True)

#数据编码

mapping={

'10+ years':0,

'9 years':1,

'8 years':2,

'7 years':3,

'6 years':4,

'5 years':5,

'4 years':6,

'3 years':7,

'2 years':8,

'1 year':9,

'< 1 year':10

}

data['Years in current job']=data['Years in current job'].map(mapping)

data=pd.get_dummies(data=data,drop_first=True)

data2=pd.read_csv(r'data.csv')

dummies_list=[]

for i in data.columns:

if i not in data2.columns:

dummies_list.append(i)

for i in dummies_list:

data[i]=data[i].astype(int)

print(data.isnull().sum())

# print(f'{data.info()}\n{data.isnull().sum()}\n{data.head()}\n{data.columns}')

# continuous_features=['Annual Income', 'Years in current job', 'Tax Liens',

# 'Number of Open Accounts', 'Years of Credit History',

# 'Maximum Open Credit', 'Number of Credit Problems',

# 'Months since last delinquent', 'Bankruptcies', 'Current Loan Amount',

# 'Current Credit Balance', 'Monthly Debt', 'Credit Score']

# correlation_matrix=data[continuous_features].corr()

# plt.figure(figsize=(12,10))

# sns.heatmap(correlation_matrix,annot=True,cmap='coolwarm',vmin=-1,vmax=1)

# plt.title('相关热力图')

# plt.xticks(rotation=45,ha='right')

# plt.show()

features=['Annual Income','Years in current job','Tax Liens','Number of Open Accounts']

# fig,axes=plt.subplots(2,2,figsize=(6,4))

# for i in range(len(features)):

# row=i//2

# col=i%2

# feature=features[i]

# axes[row,col].boxplot(data[feature].dropna())

# axes[row,col].set_title(f'boxplot of {feature}')

# axes[row,col].set_ylabel(feature)

# plt.show()

# fig,axes=plt.subplots(2,2,figsize=(6,4))

# for i,feature in enumerate(features):

# row=i//2

# col=i%2

# axes[row,col].boxplot(data[feature])

# axes[row,col].set_title(f'boxplot of {feature}')

# axes[row,col].set_ylabel(feature)

# plt.tight_layout()

# plt.show()

# fig,axes=plt.subplots(2,2,figsize=(6,4))

# for i,feature in enumerate(features):

# row=i//2

# col=i%2

# sns.boxplot(y=data[feature],ax=axes[row,col])

# axes[row,col].set_title(f'boxplot of {feature}')

# axes[row,col].set_ylabel(feature)

# plt.show()

# fig,axes=plt.subplots(2,2,figsize=(6,4))

# for i,feature,in enumerate(features):

# row=i//2

# col=i%2

# sns.histplot(

# x=feature,

# hue='Credit Default',

# data=data,

# kde=True,

# element='step',

# ax=axes[row,col]

# )

# axes[row,col].set_title(f'aa')

# axes[row,col].set_xlabel(feature)

# axes[row,col].set_ylabel(f'count')

# plt.show()

# fig,axes=plt.subplots(2,2,figsize=(6,4))

# for i,feature in enumerate(features):

# row=i//2

# col=i%2

# sns.histplot(

# x=feature,

# hue='Credit Default',

# data=data,

# kde=True,

# element='step',

# ax=axes[row,col]

# )

# axes[row,col].set_title(f'aa')

# axes[row,col].set_xlabel(feature)

# axes[row,col].set_ylabel(f'count')

# plt.tight_layout()

# plt.show()

from sklearn .model_selection import train_test_split

x=data.drop(['Credit Default'],axis=1)

y=data['Credit Default']

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=42)

print(f'train:{x_train.shape}\ntest:{x_test.shape}')

# #SVM

# print("--- 1. 默认参数随机森林 (训练集 -> 测试集) ---")

# start_time=time.time()

# svm_model=SVC(random_state=42)

# svm_model.fit(x_train,y_train)

# svm_pred=svm_model.predict(x_test)

# end_time=time.time()

# print(f'训练与预测耗时:{end_time - start_time:.4f}')

# print('\n SVM分类报告')

# print(classification_report(y_test,svm_pred))

# print(' SVM混淆矩阵')

# print(confusion_matrix(y_test,svm_pred))

# #randomforest

# print("--- 1. 默认参数随机森林 (训练集 -> 测试集) ---")

# start_time=time.time()

# rf_model=RandomForestClassifier(random_state=42)

# rf_model.fit(x_train,y_train)

# rf_pred=rf_model.predict(x_test)

# end_time=time.time()


 

# print(f'训练与预测耗时:{end_time - start_time:.4f}')

# print('\n随机森林分类报告')

# print(classification_report(y_test,rf_pred))

# print('\n随机森林混淆矩阵')

# print(confusion_matrix(y_test,rf_pred))

# #XGBoost

# print("--- 1. 默认参数随机森林 (训练集 -> 测试集) ---")

# start_time=time.time()

# xgb_model=xgb.XGBClassifier(random_state=42)

# xgb_model.fit(x_train,y_train)

# xgb_pred=xgb_model.predict(x_test)

# end_time=time.time()

# print(f'训练与预测耗时:{end_time - start_time:.4f}')

# print('\nXGBoost分类报告')

# print(classification_report(y_test,xgb_pred))

# print(' XGB混淆矩阵')

# print(confusion_matrix(y_test,xgb_pred))

# #LightGBM

# print("--- 1. 默认参数随机森林 (训练集 -> 测试集) ---")

# start_time=time.time()

# lgb_model=lgb.LGBMClassifier(random_state=42)

# lgb_model.fit(x_train,y_train)

# lgb_pred=lgb_model.predict(x_test)

# end_time=time.time()

# print(f'训练与预测耗时:{end_time - start_time:.4f}')

# print('\nLightGBM分类报告')

# print(classification_report(y_test,lgb_pred))

# print('LGB混淆矩阵')

# print(confusion_matrix(y_test,lgb_pred))

# #网格搜索

# print("\n--- 2. 网格搜索优化随机森林 (训练集 -> 测试集) ---")

# from sklearn.model_selection import GridSearchCV

# param_grid={

# 'n_estimators':[50,100,200],

# 'max_depth':[None,10,20,30,],

# 'min_samples_split':[2,5,10],

# 'min_samples_leaf':[1,2.4]

# }

# grid_search=GridSearchCV(estimator=RandomForestClassifier(random_state=42),

# param_grid=param_grid,

# cv=5,

# n_jobs=-1,

# scoring='accuracy')

# start_time=time.time()

# grid_search.fit(x_train,y_train)

# end_time=time.time()

# print(f'网格搜索耗时:{end_time-start_time:.4f}秒')

# print('最佳参数:',grid_search.best_params_)

# best_model=grid_search.best_estimator_

# best_pred=best_model.predict(x_test)

# print('\n网格搜索优化后的随机森林在测试集上的分类报告')

# print(classification_report(y_test,best_pred))

# print('网格搜索优化后的随机森林在测试集上的混淆矩阵')

# print(confusion_matrix(y_test,best_pred))

#贝叶斯优化

search_space={

'n_estimators':Integer(50,200),

'max_depth':Integer(10,30),

'min_samples_split':Integer(2,10),

'min_samples_leaf':Integer(1,4)

}

bayes_search=BayesSearchCV(

estimator=RandomForestClassifier(random_state=42),

search_spaces=search_space,

n_iter=32,

cv=5,

n_jobs=-1,

scoring='accuracy'

)

start_time=time.time()

bayes_search.fit(x_train,y_train)

end_time=time.time()

print(f'贝叶斯优化耗时:{end_time - start_time:.4f}秒')

print('最佳参数:',bayes_search.best_params_)

best_model=bayes_search.best_estimator_

best_pred=best_model.predict(x_test)

print('\n贝叶斯优化后的随机森林在测试集上的分类报告')

print(classification_report(y_test,best_pred))

print('贝叶斯优化后的随机森林在测试集上的混淆矩阵')

print(confusion_matrix(y_test,best_pred))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值