站点图标 AI技术聚合

01- 机器学习经典流程 (中国人寿保费项目) (项目一)

01- 机器学习经典流程 (中国人寿保费项目) (项目一)
  •  删除特征: data = data.drop(['region', 'sex'], axis=1)
  • 特征数据调整: data.apply( )
# 体重指数,离散化转换,体重两种情况:标准、肥胖
def convert(df,bmi):
    df['bmi'] = 'fat' if df['bmi'] >= bmi else 'standard'
    return df
data = data.apply(convert, axis = 1, args=(30,))  # args 是传参
  • 将非数字类型特征转换为数值: data = pd.get_dummies(data)
  • 设定目标值和特征值:
X = data.drop('charges', axis=1) # 训练数据
y = data['charges'] # 目标值

中国人寿保费项目

数据存储: https://blog.csdn.net/March_A/article/details/128985290

1. 导入数据

import numpy as np
import pandas as pd
data = pd.read_excel('./中国人寿.xlsx')
data.head(10)

01- 机器学习经典流程 (中国人寿保费项目) (项目一)

2. 查看数据特征

import seaborn as sns
# 性别对保费影响
sns.kdeplot(data['charges'],shade = True,hue = data['sex'])

# 地区对保费影响
sns.kdeplot(data['charges'],shade = True,hue = data['region'])

# 吸烟对保费影响
sns.kdeplot(data['charges'],shade = True,hue = data['smoker'])

# 孩子数量对保费影响
sns.kdeplot(data['charges'],shade = True,hue = data['children'],palette='Set1')

  • 不同性别对保费影响不大,不同性别的保费的概率分布曲线基本重合,因此这个特征无足轻重,可以删除, 地区同理

  • 吸烟与否对保费的概率分布曲线差别很大,整体来说不吸烟更加健康,那么保费就低,这个特征很重要

  • 家庭孩子数量对保费有一定影响

3. 删除不重要数据

data = data.drop(['region', 'sex'], axis=1)

4 特征属性调整

# 体重指数,离散化转换,体重两种情况:标准、肥胖
def convert(df,bmi):
    df['bmi'] = 'fat' if df['bmi'] >= bmi else 'standard'
    return df
data = data.apply(convert, axis = 1, args=(30,))  # args 是传参
data.head()

5 非数值转换为数据类型 (去字符串)

# 特征提取,离散型数据转换为数值型数据
data = pd.get_dummies(data)
data.head()

6 设定目标值和特征值

# 特征和目标值抽取
X = data.drop('charges', axis=1) # 训练数据
y = data['charges'] # 目标值
X.head()

7 数据拆分

# 数据拆分
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

8 数据升维

# 特征升维
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree= 2, include_bias = False)
X_train_poly = poly.fit_transform(X_train)
X_test_poly = poly.fit_transform(X_test)

9 模型训练

# 模型训练
from sklearn.linear_model import LinearRegression
model_1 = LinearRegression()
model_1.fit(X_train_poly, y_train)

# 使用弹性网络训练
from sklearn.linear_model import ElasticNet
model_2 = ElasticNet(alpha = 0.3,l1_ratio = 0.5,max_iter = 50000)
model_2.fit(X_train_poly,y_train)

10  模型评估

model_1.score(X_train_poly, y_train)  # 0.8624083431844988
model_2.score(X_test_poly, model_2.predict(X_test_poly))   # 1.0
# 模型评估
from sklearn.metrics import mean_squared_error,mean_squared_log_error
print('训练数据均方误差:',
      np.sqrt(mean_squared_error(y_train,model_1.predict(X_train_poly))))
print('测试数据均方误差:',
      np.sqrt(mean_squared_error(y_test,model_1.predict(X_test_poly))))

print('训练数据对数误差:',
      np.sqrt(mean_squared_log_error(y_train,model_1.predict(X_train_poly))))
print('测试数据对数误差:',
      np.sqrt(mean_squared_log_error(y_test,model_1.predict(X_test_poly))))

结论:

  • 进行EDA数据探索,可以查看无关紧要特征

  • 进行特征工程:删除无用特征、特征离散化、特征提取。这对机器学习都至关重要

  • 对于简单的数据(特征比较少)进行线性回归,一般需要进行特征升维

  • 选择不同的算法,进行训练和评估,从中筛选优秀算法

文章出处登录后可见!

已经登录?立即刷新
退出移动版