关注上方"机器学习社区"
设为"置顶或星标",第一时间送达干货
分享 BAT 机器学习面试200题!
机器学习“四大名著”资料发布
作者:ChangingWudake
https://blog.csdn.net/qq_33333002/article/details/106280462
这是一份kaggle上的银行的数据集,研究该数据集可以预测客户是否认购定期存款y。这里包含20个特征。
1. 分析框架

2. 数据读取,数据清洗
# 导入相关包
import numpy as np
import pandas as pd
# 读取数据
data = pd.read_csv('./1bank-additional-full.csv')
# 查看表的行列数
data.shape
输出:

这里只有nr.employed这列有丢失数据,查看下:
data['nr.employed'].value_counts()

这里只有5191.0这个值,没有其他的,且只有7763条数据,这里直接将这列当做异常值,直接将这列直接删除了。
# data.drop('nr.employed', axis=1, inplace=True)
3. 探索性数据分析
3.1查看各年龄段的人数的分布
这里可以看出该银行的主要用户主要集中在23-60岁这个年龄层,其中29-39这个年龄段的人数相对其他年龄段多。
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.figure(figsize=(20, 8), dpi=256)
sns.countplot(x='age', data=data)
plt.title("各年龄段的人数")

3.2 其他特征的一些分布
plt.figure(figsize=(18, 16), dpi=512)
plt.subplot(221)
sns.countplot(x='contact', data=data)
plt.title("contact分布情况")
plt.subplot(222)
sns.countplot(x='day_of_week', data=data)
plt.title("day_of_week分布情况")
plt.subplot(223)
sns.countplot(x='default', data=data)
plt.title("default分布情况")
plt.subplot(224)
sns.countplot(x='education', data=data)
plt.xticks(rotation=70)
plt.title("education分布情况")
plt.savefig('./1.png')

plt.figure(figsize=(18, 16), dpi=512)
plt.subplot(221)
sns.countplot(x='housing', data=data)
plt.title("housing分布情况")
plt.subplot(222)
sns.countplot(x='job', data=data)
plt.xticks(rotation=70)
plt.title("job分布情况")
plt.subplot(223)
sns.countplot(x='loan', data=data)
plt.title("loan分布情况")
plt.subplot(224)
sns.countplot(x='marital', data=data)
plt.xticks(rotation=70)
plt.title("marital分布情况")
plt.savefig('./2.png')

plt.figure(figsize=(18, 8), dpi=512)
plt.subplot(221)
sns.countplot(x='month', data=data)
plt.xticks(rotation=30)
plt.subplot(222)
sns.countplot(x='poutcome', data=data)
plt.xticks(rotation=30)
plt.savefig('./3.png')
3.3 各特征的相关性
plt.figure(figsize=(10, 8), dpi=256)
plt.rcParams['axes.unicode_minus'] = False
sns.heatmap(data.corr(), annot=True)
plt.savefig('./4.png')

4. 特征规范化
4.1 将自变量的特征值转换成标签类型
# 特征化数据
from sklearn.preprocessing import LabelEncoder
features = ['contact', 'day_of_week', 'default', 'education', 'housing',
'job','loan', 'marital', 'month', 'poutcome']
le_x = LabelEncoder()
for feature in features:
data[feature] = le_x.fit_transform(data[feature])
4.2 将结果y值转换成0、1
def parse_y(x):
if (x == 'no'):
return 0
else:
return 1
data['y'] = data['y'].apply(parse_y)
data['y'] = data['y'].astype(int)
4.3 数据规范化
data['nr.employed'].value_counts()
0
5. 模型训练
5.1 AdaBoost分类器
data['nr.employed'].value_counts()
1

5.2 SVC分类器
data['nr.employed'].value_counts()
2

5.3 K邻近值分类器
data['nr.employed'].value_counts()
3

5.4 决策树分类器
data['nr.employed'].value_counts()
4

6 模型评价
6.1 AdaBoost分类器
data['nr.employed'].value_counts()
5

6.2 SVC分类器
data['nr.employed'].value_counts()
6

6.3 K邻近值分类器
data['nr.employed'].value_counts()
7

6.4 决策树分类器
data['nr.employed'].value_counts()
8
- EOF -
data['nr.employed'].value_counts()
9
还没有评论,来说两句吧...