飞道的博客

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

393人阅读  评论(0)
  •  删除特征: data = data.drop(['region', 'sex'], axis=1)
  • 特征数据调整: data.apply( )

  
  1. # 体重指数,离散化转换,体重两种情况:标准、肥胖
  2. def convert( df,bmi):
  3. df[ 'bmi'] = 'fat' if df[ 'bmi'] >= bmi else 'standard'
  4. return df
  5. data = data.apply(convert, axis = 1, args=( 30,)) # args 是传参
  • 将非数字类型特征转换为数值: data = pd.get_dummies(data)
  • 设定目标值和特征值:

  
  1. X = data.drop( 'charges', axis= 1) # 训练数据
  2. y = data[ 'charges'] # 目标值


中国人寿保费项目

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

1. 导入数据


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

2. 查看数据特征


  
  1. import seaborn as sns
  2. # 性别对保费影响
  3. sns.kdeplot(data[ 'charges'],shade = True,hue = data[ 'sex'])
  4. # 地区对保费影响
  5. sns.kdeplot(data[ 'charges'],shade = True,hue = data[ 'region'])
  6. # 吸烟对保费影响
  7. sns.kdeplot(data[ 'charges'],shade = True,hue = data[ 'smoker'])
  8. # 孩子数量对保费影响
  9. sns.kdeplot(data[ 'charges'],shade = True,hue = data[ 'children'],palette= 'Set1')

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

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

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

3. 删除不重要数据

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

4 特征属性调整


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

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


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

6 设定目标值和特征值


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

7 数据拆分


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

8 数据升维


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

9 模型训练


  
  1. # 模型训练
  2. from sklearn.linear_model import LinearRegression
  3. model_1 = LinearRegression()
  4. model_1.fit(X_train_poly, y_train)
  5. # 使用弹性网络训练
  6. from sklearn.linear_model import ElasticNet
  7. model_2 = ElasticNet(alpha = 0.3,l1_ratio = 0.5,max_iter = 50000)
  8. model_2.fit(X_train_poly,y_train)

10  模型评估


  
  1. model_1.score(X_train_poly, y_train) # 0.8624083431844988
  2. model_2.score(X_test_poly, model_2.predict(X_test_poly)) # 1.0

  
  1. # 模型评估
  2. from sklearn.metrics import mean_squared_error,mean_squared_log_error
  3. print( '训练数据均方误差:',
  4. np.sqrt(mean_squared_error(y_train,model_1.predict(X_train_poly))))
  5. print( '测试数据均方误差:',
  6. np.sqrt(mean_squared_error(y_test,model_1.predict(X_test_poly))))
  7. print( '训练数据对数误差:',
  8. np.sqrt(mean_squared_log_error(y_train,model_1.predict(X_train_poly))))
  9. print( '测试数据对数误差:',
  10. np.sqrt(mean_squared_log_error(y_test,model_1.predict(X_test_poly))))

结论:

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

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

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

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


转载:https://blog.csdn.net/March_A/article/details/128985172
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场