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、判断赛题模型:本题为回归问题
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、删除
①成列删除
特征:如果一行中有空值,则删除掉那一行的信息
性别 | 年龄 |
---|---|
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来表示是男性或者女性
本文的全部理解源于《阿里云天池大赛塞梯解析》-机器学习篇