机器学习,数据挖掘等领域的知识碎片【不定期更新】

这部分内容没有固定主题,不定期更新,都是些零碎的,我觉得有必要记一笔的知识。希望能对其他人也有所帮助。

sklearn.feature_selection 里的 F_regression

特征选择方法众多,sklearn 的特征选择模块里给出了几种非常简易高效的方法。针对回归问题,sklearn 给出了两种方法,其中一种是 F_regression 引起了我的注意。F_regression 在 sklearn 里只有寥寥几句的介绍,好在源码简短易读。之前搜了搜网上其它对这个函数的解读,要么解释不全,要么干脆是错的,所以我就在这里详细讲讲。

先放源码如下:

F_regression 在干什么?一句话就能讲清楚:每个特征 X 单独拎出来和 Y 计算相关系数,并排序。特征选择就是基于 X 和 Y 的相关程度。

实际操作分为三步:

  • 计算相关系数;
  • 转化为 F score;
  • 计算 P 值;

最后排名是根据 F score,可以选择输出 P 值。

一步一步讲。相关系数最不用谈,就是 Y 与 X 线性关系的度量。计算完相关系数还不够,这里的相关系数严格来说是样本相关系数,如何从样本推论到总体呢?这就需要做假设检验,对未知参数提出某种假设,利用样本提供的信息对提出的假设进行检验,根据检验结果对提出的假设做出拒绝或接受的判断。参照线性回归的假设检验形式,在此我们提出的假设(零假设)为 X 与 Y 不存在线性关系,即 \(\beta = 0\)。提出零假设后,我们需要去计算 P 值,P 值即零假设成立的情况下所得到的样本观察结果或更极端结果出现的概率。如果 P 值足够小,我们就能拒绝零假设,从而认为 X 与 Y 存在线性关系。

注意到相关系数和 R 平方的关系,两者在简单一元线性回归情形下是等价的。

先定义一元线性回归式,\(y = \beta_0 + \beta_1 x + \epsilon\),再记录几个值,

\[Y = (y_1, y_2, ..., y_n)^T, \quad \beta = (\beta_0, \beta_1)^T\]

\[ X =
\begin{bmatrix}
1 & ... & 1 \ x_1 & ... & x_n \ \end{bmatrix}^T, \quad \epsilon = (\epsilon_1, ..., \epsilon_n)^T\]

\[L_{xy} = \sum\limits_{t=1}^n(x_t - \bar x)(y_t - \bar y), \quad L_{xx} = \sum\limits_{t=1}^n(x_t - \bar x)^2, \quad L_{yy} = \sum\limits_{t=1}^n(y_t - \bar y)^2\]

可以证得,

\[\hat\beta = (X^TX)^{-1}X^TY = \begin{bmatrix}
\bar y - \bar x L_{xy} / L_{xx} \ L_{xy} / L_{xx} \ \end{bmatrix}
\]

此时,\(\hat\beta_1 = L_{xy} / L_{xx}\),\(\hat\beta_0 = \bar y - \bar x\hat\beta_1\),那么

\[\hat y = \hat \beta_0 + \hat \beta_1x = \bar y + \hat\beta_1(x-\bar x)\]

可以计算出回归平方和 \(U_R\)

\[U_R = \sum\limits_{t=1}^n (\hat y_t - \bar y)^2 = \frac{L_{xy}^2}{L_{xx}}\]

我们已知了总离差平方和 \(S_T = L_{yy}\),那么 R 平方显而易见,

\[R^2 = \frac{U_R}{S_T} = \frac{L_{xy}^2}{L_{xx}L_{yy}} = r^2\]

\(r\) 就是相关系数,于是得证,一元线性回归中 R 平方和相关系数的平方等价。

因此我们计算出的相关系数完全可以理解为 \(Y \sim X\) 线性回归的 R 平方值。从 R 平方值可以推出 F score。

易求得残差平方和 \(Q_e\)

\[Q_e = L_{yy} - U_R = L_{yy}(1-r^2)\]

此时,当零假设成立,即 \(\beta_1 = 0\) 时,F score 即为

\[\begin{align*}
F &= \frac{U_R / 1}{Q_e / (n-2)} \sim F(1, n-2) \\ \notag
&= \frac{r^2}{1 - r^2} (n-2) \notag
\end{align*}\]

在零假设条件下,F score 应该较小,即误差主要由随机误差产生。因此想要拒绝零假设,就需要一个大的 F 值,大到什么程度呢?设定显著性水平为 \(\alpha\),拒绝域为 \(\{F > C\}\),\(C\) 可以通过 \(\alpha = P(F>C \left | H_0 \right)\) 求得。

或者从 P 值的角度,计算 P 值为 \(P(F > \hat F)\),\(\hat F\) 为由样本计算出的 F 值,当 P 值小于显著性水平时,表示拒绝零假设,Y 与 X 存在线性关系。

这种方法的缺陷一目了然,就是完全忽略了其它特征的影响,实际用的时候还需谨慎。我一般会参照 P 值,设定一个显著性水平,高于显著性水平的特征全部舍弃。或者舍弃 F score 排名最靠后的,而不是取排名靠前的。

原文地址:https://www.cnblogs.com/muyanchengfan/p/9527282.html

时间: 2024-08-05 20:05:53

机器学习,数据挖掘等领域的知识碎片【不定期更新】的相关文章

Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)

原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开发语言是C/C++,但平时的很多文本数据处理任务都交给了Python.离开腾讯创业后,第一个作品课程图谱也是选择了Python系的Flask框架,渐渐的将自己的绝大部分工作交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处理,科学计算,机器学习和数据挖掘领域,有很多很多

【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱

好文 mark http://www.52nlp.cn/python-%E7%BD%91%E9%A1%B5%E7%88%AC%E8%99%AB-%E6%96%87%E6%9C%AC%E5%A4%84%E7%90%86-%E7%A7%91%E5%AD%A6%E8%AE%A1%E7%AE%97-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0-%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工

[resource-]Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱

reference: http://www.52nlp.cn/python-%e7%bd%91%e9%a1%b5%e7%88%ac%e8%99%ab-%e6%96%87%e6%9c%ac%e5%a4%84%e7%90%86-%e7%a7%91%e5%ad%a6%e8%ae%a1%e7%ae%97-%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0-%e6%95%b0%e6%8d%ae%e6%8c%96%e6%8e%98 一.Python网页爬虫工具集 一个真实的项目,一定是

机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

http://www.cnblogs.com/tornadomeet/p/3395593.html 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大.

机器学习在生物信息领域可以做些什么?

用"machine learning genomics"在 biorxiv 中检索(限定一下Bioinformatics领域),查看最新文章的标题和摘要,看看机器学习都能做些什么实际的项目. 1.Machine-learning annotation of human splicing branchpoints(RNA剪切体位点预测) 使用机器学习来注释人类剪切体的分支点 需要有 RNA splicing 的知识,首先得搞懂 branchpoint.lariat formation的概

机器学习深度学习领域参考书 《TensorFlow技术解析与实战》PDF下载

<TensorFlow技术解析与实战> 机器学习深度学习领域参考书 包揽TensorFlow1.1的新特性 人脸识别 语音识别 图像和语音相结合等热点一应俱全 李航 余凯等人工智能领域专家倾力推荐目录第一篇 基础篇下载地址:https://pan.baidu.com/s/1iKDExWOgCuvxyqsF12abFg备用地址:https://u1593575.ctfile.com/fs/1593575-330753940 TensorFlow?是谷歌公司开发的深度学习框架,也是目前深度学习的主

iOS开发基础知识--碎片32

 iOS开发基础知识--碎片32 1:动画属性UIViewAnimationOptions说明 a:常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:动画过程中保证子视图跟随运动. UIViewAnimationOptionAllowUserInteraction:动画过程中允许用户交互. UIViewAnimationOptionBeginFromCurrentState:所有视图从当前状态开始运行. UIViewAnimat

iOS开发基础知识--碎片1

iOS开发基础知识--碎片1  一:NSString与NSInteger的互换 NSInteger转化NSString类型:[NSString stringWithFormat: @"%d", NSInteger]; NSString转化 NSInteger类型:NSInteger = [NSString intValue]; *其它几个同理 [NSString boolValue].[NSString floatValue].[NSString doubleValue] 二:Obje

iOS开发基础知识--碎片3

iOS开发基础知识--碎片3  iOS开发基础知识--碎片3 十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice currentDevice].model; //系统版本型号,如iPhone OS return [UIDevice currentDevice].systemVersion; //系统版本名称,如6.1.3 return [UIDevice