首页 > 试题广场 >

请写出在数据预处理过程中如何处理以下问题 1) 为了预

[问答题]

请写出在数据预处理过程中如何处理以下问题

1) 为了预测摩拜每天订单数,我们建立了一个线性回归模型,其中有一个自变量为天气类型(分类变量),分为晴、阴、雾霾、沙尘暴、雨、雪等6种类型,请问如何处理这种变量

<o:p> </o:p>

<o:p> </o:p>

2) 仍然是1) 中的线性回归模型,其中有一个自变量为每天红包车的数量,但是这个变量有1/4的数据是缺失值,请写出至少两种处理缺失值的方法

<o:p> </o:p>

<o:p> </o:p>

3) 依然是1) 中的模型,其中自变量有4个,他们的相关系数矩阵如下:


请问是否有问题?如有,请写出解决方法

1)答:因为天气为离散变量,取值之间几乎没有相关性也没有方向,此时应该转换为哑变量,例将晴设置为变量,若晴天则为1,否则为0,此时需要注意的是,为了防止生成的哑变量之间存在相关性,只需要对前面n-1(设离散取值为n)个变量生成哑变量,当前n-1个变量取值均为0时,则表示第n个天气。

 2)答:i:因为红包车的数量可看做为离散变量,所以可以用该变量全部取值的均值进行替代;

ii:可按照某个方式分组,再以组的均值进行填充,如以用户id分组,然后用该用户在该变量取值的均值进行填充。

 3)答:由相关系数图可知,变量2和变量3之间存在较大的负相关性,变量之间存在共线性问题,会影响模型的结果。

可选择用逐步回归法进行自动判断剔除该变量,或者直接剔除该变量,比较提出前后模型的表现效果,若变好则剔除。

发表于 2018-08-28 14:38:43 回复(0)
1.天气是离散无序变量,首先用LabelEncoder()将其数值化,再用onehotencoder()进行编码;
  
from sklearn.preprocessing import LabelEncoder,OneHotEncoder import pandas as pd import numpy as np
data =pd.DataFrame({'天气':['晴','阴','雾霾','沙尘暴','雨','雪']})
le = LabelEncoder()
datas=le.fit_transform(data['天气'].values)
data_weather1 = np.array([datas])
de = OneHotEncoder()
datas = de.fit_transform(data_weather1.reshape(-1,1)).toarray()
datas = datas.astype(np.int32) print(datas) for i in range(len(data['天气'].values)):
        data.iloc[i,0]= datas[:,i]
==========简单办法
data = pd.get_dummies(data)
2.红跑车的数量是离散型数值变量,缺失1/4的数据,
  a.用0或者已有数据的均值/众数替代
  b.插值法 拉格朗日/牛顿
3.变量之间存在很强的相关性,如变量2和3,自变量之间的共线性问题会降低拟合效果。
  皮尔森系数用来计算两个数据间有多强的联系,绝对值越趋近于1,表明相关性越强。一般来讲,可用如下的几个等级进行描述:
0.8-1.0 极强相关
0.6-0.8 强相关
0.4-0.6 中等程度相关
0.2-0.4 弱相关
0.0-0.2 极弱相关或无相关
解决办法: 1.把相关的自变量从模型中剔除 2.采用PCA等变量降维方法,原始变量一个不要全部采用PCA组合出来的变量,一次性解决多重共线性问题 3.在建模过程中采用逐步回归的方法逐个选择进入模型的变量,避免多重共线性问题发生 

  
发表于 2019-08-27 14:57:48 回复(1)
(1)
将分类型变量转化为数值型变量
晴、阴、雾霾、沙尘暴、雨、雪分别对应1,2,3,4,5,6
(2)
①用3/4的非空值的平均值代替1/4的空值
②丢弃掉这1/4的空值数据
(3)
可能会存在多重共线的情况

发表于 2018-10-16 20:17:13 回复(0)
1)分别赋值1,2,3,4,5,6
2)删除数据、均值填充、线性回归填充
3)4个自变量相关性太大
发表于 2018-09-02 16:29:31 回复(0)
1) 用哑变量处理
2)缺失有可能是没有红包车,用0填充;若根据实际情况判断不太可能出现0的情况,那么用均值或者中位数填充
3)变量之间存在共线性问题,可考虑剔除变量2或者采用PCA
发表于 2018-08-11 17:55:25 回复(0)