【1】赛题理解
1、下载数据,查看数据集,得到target
2、评估指标为:MSE(均方误差)
from sklearn.metrics import mean_squared_error
y_test = [1,2,3]
y_predict = [1.2, 2.1, 3.2]
mean_squared_error(y_test, y_predict)
# 输出
0.030000000000000023
3、判断赛题模型:本题为回归问题
【2】数据探索
1、相关性计算:
import numpy as np
x = np.array([25,45,65,28,95,45])
y = np.array([12,45,12,4,45,45])
y1 = np.array([25,45,65,28,95,44])
y2 = np.array([25,45,65,28,95,45])
a = np.corrcoef(x,y)
b = np.corrcoef(x,y1)
c = np.corrcoef(x,y2)
display(a,b,c)
输出:
array([[1. , 0.49859058],
[0.49859058, 1. ]])
array([[1. , 0.99987943],
[0.99987943, 1. ]])
array([[1., 1.],
[1., 1.]])
相关性结果 | 表示的意思 |
---|---|
0-0.09 | 无相关 |
0.1-0.3 | 弱相关 |
0.3-0.5 | 中等相关 |
0.5-1.0 | 强相关 |
2、卡方验证
用的是sklearn中的iris数据集,使用卡方验证 筛选与target相关的特征
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
iris = load_iris()
X,y = iris.data, iris.target
chiValues = chi2(X,y)
X_new = SelectKBest(chi2, k = 2).fit_transform(X,y)
(输出结果太多,我就不展示了)
sklearn库的iris数据集地址
3、缺失值处理
3.1、删除
①连续删除
Feature:如果一行有空值,则删除该行的信息
性别 | 年龄 |
---|---|
F 【删除】 | NULL 【删除】 |
F | 23 |
M 【删除】 | NULL【删除】 |
NULL【删除】 | 26【删除】 |
M | 67 |
M | 12 |
②成对删除
特点:如果有空值,只删除那个区域的空值,其他值保持不变
性别 | 年龄 |
---|---|
F | NULL【删除】 |
F | 23 |
M | NULL【删除】 |
NULL【删除】 | 26 |
M | 67 |
M | 12 |
3.2 平均值,中位数,众数填充
通常使用非缺失值的中位数或均值来填写
3.3 预测值填充
数据集分为两部分:
训练集 | 没有缺失值 |
---|---|
测试集 | 存在缺失值 |
缺点:①预测值可能过于“标准”,即我们不知道模型是否正确,取值的结果只是更符合我们选择的模型,而不是真正的随机数字
②如果变量之间没有关系,得到的缺失值会不准确
4、异常值处理
异常值通常以极不寻常的均值和标准差出现
异常值检测一般以可视化的方式进行(箱线图、直方图、散点图)
引文 – 维基百科箱线图图片
方法:
①删除:与上述一致(两种删除方式)
②变换:比如对数据取对数,可以缓解极值带来的变化
③补充:
自然形成的异常值:与填充相同
人为异常值:使用预测模型
④ 区别对待:
异常值太多(通常很少)
数据分为异常组和非异常组。为两组建立模型以组合数据进行输出。
5、变量转换
发生原因:数据分布显示。如果发现数据不均匀,可以对数据进行对数变换,使其分布均匀。
如何转换:
转换方法 | 说明 | 备注 |
---|---|---|
非线性 ~> 线性 | 最常见:对数变换 | 适用于右倾斜分布,不适合 含有0或者负数 |
倾斜分布对称 | 右倾斜:平方根,立方根或对数; 左倾斜:平方,立方或指数 | 不适合很小的数据集 |
变量分组 | 根据不同的目标 把变量分成不同的组 | 超高维逻辑回归就是采取one-hot编码 |
6、新的变量生成
根据现有变量生成新变量(新变量可能具有更好的相关性)
6.1 派生变量:从现有的数据中创建
示例:现在我们要调查缺失的人口值,可以分为四种类型(已婚男性、女性、未婚男性、女性)
6.2 创建哑变量:将类别型数据转化为数值型变量
例子:性别中存在男性和女性,将其变为:Var_male和Var_female,这俩个数据用0或者1来表示是男性或者女性
本文的全部理解来自《阿里云天池竞赛结算解析》——机器学习
文章出处登录后可见!