实验汇报
¶实验目的
预测血糖值
¶实验步骤
¶Step1 数据概览
¶导部分入包
1 | import time |
¶数据导入
1 | # 导入文件 |
¶Step2 数据探索
¶接下来可以使用 info ,discribe ,columns等方打印数据信息,基本认识数据集
¶利用热力图来了解特征间的相关性
1 | plt.figure(dpi=600) |
¶计算各个特征的缺失值
1 | null_percentage = data.isnull().sum()/len(data) |
¶查看标签分布
1 | print(data['年龄'].value_counts()) |
¶查看异常值
1 | data1=data['血糖'] |
¶Step3 数据预处理
¶将性别列转化为数字
1 | data['性别']=data['性别'].map({'男': 1, '女': 0,"??": 0}) |
¶剔除无关列 由于 id
和 日期
不能作为影响血糖值的因素故删除
1 | data = data.drop('体检日期',axis=1) |
¶缺失值处理 由于乙肝表面抗原
、乙肝表面抗体
、乙肝核心抗体
、乙肝e抗原
、乙肝e抗体
这五个基本特征缺失比例超过70%,且这五种基本特征对于预测模型的影响权重较小所以这里选择将这几列直接删除,剩下的用均值填充
1 | thresh_count = data.shape[0]*0.3 |
¶平滑处理
1 | tmp, lambda_ = stats.boxcox(data['血糖']) |
¶异常值处理 删除异常行
1 | data=data.drop(index=error.index,axis=0) |
¶Step 4 特征工程
¶利用回归方法mutual_info_regression计算特征的重要程度
1 | from sklearn.feature_selection import mutual_info_regression |
¶利用单因素分析计算特征重要程度
1 | data_x=part_data.values |
¶取两种方法的均值,并选出影响大的作为特征
1 | feature_values = [] |
¶特征选取,数据归一化
1 | #数据归一化 |
¶Step 5 模型构建
¶划分数据集
1 |
|
¶利用线性回归方法进行建模
1 | from sklearn.metrics import * |
¶利用岭回归建模
1 | from numpy import genfromtxt |
¶模型评估 mse
1 | mse_test=np.sum((y_test_pred-y_test)**2/len(y_test)) |
1 | import org.apache.spark.SparkContext |