机器学习中自变量和因变量 自变量与因变量举例
机器学习中自变量和因变量 自变量与因变量举例
在机器学习中,自变量和因变量是两个非常重要的概念。本文将从变量的基本概念出发,详细讲解自变量和因变量的定义、选取方法以及它们在实际问题中的应用。
一、再谈变量
上篇说了变量的概念,那么我们再详细介绍下。变量是各种各样的,但无外乎是 “数值” 和 “字符串” ,数值我们已经很熟悉了,“字符串”就比如学生姓名(“张三”,“李四”,“Tom”),还有句子,文章段落等。
数值变量的话又可以分为两种, 连续型变量 和 分类变量 。如果某个变量取值是在某个区间连续的,就比如商品价格、长度、重量、分数等,就是连续型变量。如果某个变量是类别或者标签,取值就几个,例如性别(男,女)、评级(优秀,良好,差)、学历(小学,初中,高中,大学)等,就是分类变量。
连续型变量和分类变量的除了从实际意义上区分,再就是取值上进行区分。 拿到数据后一定要先看下,对每个变量的类型有所了解,这对后面的确定研究问题和研究方法至关重要。
身高就是连续型变量,性别就是分类变量。
二、确定研究变量(Y,X)
当拿到数据以后,随之而来的就是要研究什么问题 ,要从这份数据中研究什么,分析出来什么。
1.因变量
数据看完,各个变量也有详细了解后,那么就要确定自变量(X1,X2,X3......)和因变量(Y)。 你所研究问题的重点,或者想要围绕的某个变量,就是因变量。 例如你要研究一个问题是“学生成绩与什么因素有关”,搜集到的数据变量有“成绩”、“家长陪伴孩子时间”、“老师的耐心程度”、“有没有上补习班”等等,自然“成绩”这一变量就是因变量。
因变量通常只有一个。当然也可以是多个,这个时候就是多输出问题了。
2.自变量
自变量的选取是不受限的, 其实广泛来说,除了因变量,其他所有变量都可以当做自变量。
但请注意你所选取的自变量是否有意义,或者是不是太多或者太少。
(1)是否有意义
何为有意义?如果某些变量明确是对因变量没有影响的,就是无意义,可以不研究。例如“研究学生成绩与什么因素有关”,我们搜集到了很多变量,其中有学生姓名和学号,那么姓名和学号这两个变量明显是没有意义的,因为不可能你取了一个什么名字,或者你的学号比较顺眼就考了一个好成绩,所以可以不把这两个变量当作自变量进行研究。
拓展一下,这个姓名和学号,或者网站链接,工号,位置信息等,能够唯一代表该行样本属性的,在数据库语言中叫 “主键” 。你可以理解为,我知道了你的工号或者学号,就能查到你的所有样本信息。
(2)自变量太多
还记得上篇讲的“np难问题”吗,我们通常希望样本个数是远大于变量个数的(n远大于p)。但有时已经满足了此条件,自变量有几十个或者几百个, 全研究的话既麻烦而且后续建模时的效果可能会不好。此时便要考虑进行降维,也叫筛选变量。 例如 主成分分析 (PCA),线性回归引申的 Lasso 、 岭回归 ,统计学中的 向前选择 , 向后剔除 , 逐步回归 等等。
(3)自变量太少
有时我们搜集到了数据,但可用的自变量很少,就两三个,或者我们对已有的自变量已经很熟悉了,想要发掘一些新变量进行研究。此时便可以 用已有的变量进行组合产生新变量 ,例如已有变量x1、x2,那么可以产生变量x3=x1/x2,x4=x1^2,x5=x1*x2,x6=x1^2/x2……。这个过程也叫做 特征工程 ,变量又叫做特征。但注意,组合新变量从理论上来说是无穷的,因为它们之间的运算可以无穷,请注意你是否需要这么多变量和变量背后的意义。
3.因变量和自变量关系
通常我们确定研究问题,研究的因变量后,我们希望通过自变量发现因变量所受影响和影响大小,继而发现某种规律或者结论。通常Y和X的关系可以写为:
Y=f(X)
f()就是某种函数关系,可以显化也可以不显化, X是自变量,注意它不止是一个自变量,而是所有研究的自变量总体。
但无论我们怎么研究,真实的Y和X之间的关系我们是不知道的,只是尽可能去建模、模拟产生一个f(X)来近似这种关系。 当然明确的数量关系除外,例如成绩单中的总分,这个变量注定是其他各科分数的组合,不用建立模型我们就知道。我们也可以加入一个随机误差项
,表示我们建立的模型和真实的关系之间的误差:Y=f(X)+
三、确定问题性质
确定自变量、因变量,已经明确它们是连续变量还是分类变量后,我们要确定问题属于哪种问题,这样才能根据它的性质来确定后面的模型用什么模型,分析怎么分析。
确定问题性质主要看因变量,如果因变量是连续型变量,那么问题就是一个回归问题;如果因变量是分类变量,那么问题就是一个分类问题。
在机器学习中, 只要有因变量,那么这就是“有监督学习”;如果我们只有自变量没有因变量的时候,这就是“无监督学习”。
还记得一开始说的变量还可以是“字符串”吗,如果你的因变量是字符串,那么请注意,它到底是不是“真正的字符串”。比如因变量是颜色类型(具体为“红”、“黄”、“蓝”),你很容易理解这是一个分类问题, 但因变量都是字符串怎么办? 这个时候是可以转化的,可以把“红”、“黄”、“蓝”转化为“0”、“1”、“2”。但请注意,这个地方的数值并不像0,1,2有大小可以运算那样了,它们只代表的背后的所属类型,不代表大小和运算。当然你转为“3”、“4”、“5”或者“-1”、“0”、“1”都是一样的,只要区分它们本质是“红”、“黄”、“蓝”这三类就可以了。
如果你的数据全是字符串,或者你就要对字符串研究,它们是段落、文章、音频等,那么你的问题就是另一个领域了, “自然语言处理” ,缩写为 NLP 。