博文

日常机器学习(二十五)线性预测回归实例——预处理问题

图片
数据预处理时,一般需要将数据进行归一化(标准化)处理,这时可以用到StandScaler()函数: 要预测的变量"Petal.area"设为target,其他的x变量放入features中,归一化结果如上图所示。 除了归一化以外,可以看到"Species"这一项分类项也想用数字化的思想去分类。这时候可以用到get_dummies()函数。如这个"Species"中现在有三个类别"setosa","versicolor","virginica"。那么get_dummies()函数会生成三列指标,并用0或1表示是否属于该类别,如下图: 最后对数据划区,分别化成训练区和测试区,train_test_split()函数可以帮忙直接根据比例划分:

日常机器学习(二十四)线性预测回归实例——特征相关性

图片
首先corr()函数可以帮助我们找到数据的协相关系数矩阵 可以看出这是一个对称矩阵。为了找出相关系数较大的两组数据,我们可以只取矩阵的上三角部分 由上图可以看出,只需在原先的矩阵上乘上一个上三角全为1的矩阵即可。然后用stack()命令可以将矩阵转换成两两匹配的列 然后用sort命令对数据进行绝对值的从大到小排列,并重新定义index 可以看到重新定义index后数据的列名(columns)是level_0和level_1,我们可以用data.columns重新定义列名 可以从数据中看出Petal.Length和Petal.Width相关性很高,可以用乘积来替代。No.那一列与别的相关性很高,但是这是编号,可以drop掉 sns中有一个heatmap可以画相关性的图 下图看出,颜色越深的表示相关性越高 sns也有可以画两两匹配的散点图pairplot hue表示可以用原数据中的一些分类变量来画不同类别的点,对角线上图表示数据分布 sns中lmplot函数可以画针对性的两两分布图,并给出线性回归的曲线。阴影部分表示置信区间

日常机器学习(二十三)线性预测回归实例——缺失值处理

图片
使用missingno中的包,可以画出缺失值的位置: 白色的位置表示缺失值位置。(详情可以参见https://github.com/ResidentMario/missingno) pd.isnull()可以显示数据中缺失的那一部分,代入到原数据中,就可以显示出缺失的那一部分的数据值。 对于缺失的数据如何填补,我们可以先画该数据的累积分布函数(ECDF函数可以画累积分布函数,详情package参照第二十二篇)或柱状分布函数来看看该数据的具体分布。 groupby()函数可以根据括号中的选项来对原数据进行分类 transform函数可以替换原数据中的缺失值。 可以看到在'Sepal.Width'中原来的缺失值使用'setosa'这一类的平均值来替换掉。

日常机器学习(二十二)线性预测回归实例——package及数据介绍

图片
本篇讲一个关于线性回归的实际案例: 首先介绍几个常用的包 seaborn包是做数据的可视化的。missingno是做缺失值数据的可视化。 %matplotlib inline这个属于python里的魔法函数,可以省略plt.show()从而直接画图 在线性回归的统计中,主要用到的包是stats和skl包。seed是随机种子。 使用pd.read_csv()可以读取csv文件,na_values="?"表示把问号的数值替换为缺失值。 data.shape表示可以获取数据的维度 data.describe()可以显示出数据的各个统计量的值,第一行count为有效数据的个数。

日常机器学习(二十一)误差项分析;似然函数求解;目标函数;最终求解;评估方法

图片
一般来讲理论值和真实值之间都会有一定的误差。 假设: 1)一般来说假设误差满足均值为0,方差为sigma^2的高斯分布。 2)两个独立变量之间相互独立,即每个误差相互独立 3)所有误差满足同分布 为什么选用高斯分布呢?因为高斯分布绝大多数的情况下浮动不会太大。 预测模型为: 误差满足高斯分布 将误差带入模型: 该式子的似然函数为: 取对数后: 对对数似然函数进行化简: 前一项为常数,为了使似然函数越小,那么目标函数越大越好: 目标函数转化为: 求偏导: 偏导等于0,得到最终式子: 一般用的评估项: 分子是残差平方和,分母是类似方差项,这个值越接近1说明结果越好。

日常机器学习(二十)线性回归算法概述

图片
线性拟合表示对一个应变量(y),有一系列的元素(xp)(元素也可以理解为自变量),我们想得到一个线性回归方程 这里,p 表示自变量的个数,i 表示数据个数。(PS:会有一个常数项) 也可以写成一个矩阵形式 其中

日常机器学习(十九)Matplotlib细节设置

图片
若想除去图形的四周边框,可以用下面的函数 去除单位锯齿,以可用下图参数 颜色可以使用自定义颜色 使用linewidth=number可以定义线条宽度,ax.text(x,y,"text")可以在(x,y)位置插入文本