用机器学习帮助完成找女票的事业还不行吗?

电子说

1.2w人已加入

描述

编者按:本文作者是滑铁卢大学计算机科学专业17级的学生Bai Li,他在博客上写了一篇用逻辑回归预测找到女朋友的概率教程。论智君友情提示,本文意在分享项目思路,请勿轻易对号入座。

滑铁卢大学是加拿大著名的理工科高校,是北美地区最优秀的大学之一,我们的数学、计算机科学和工程学科水平居世界前列。然而,这样的学校都有一个明显的特点:男多女少。更糟糕的是滑铁卢大学是出了名的缺少社交活动,所以估计我也跟学校里众多CS同学一样,女朋友是找不到的,这辈子都找不到的。

有人觉得爱情是无法量化的,这种操作太抽象,女朋友什么的,还是顺其自然吧。但是作为滑铁卢大学的数据科学家,这一点我不敢苟同。计算机专业的男人绝不轻易认输!没有社交,用机器学习帮助完成找女票的事业还不行吗?

下面我就来说说详细的教程,都搬好板凳拿起小本本!

首先,我们要明确这个项目的问题是:滑铁卢大学的男生想找到女朋友,都需要哪些特质?首先,大部分人都觉得工资高肯定更吸引妹子,另外身高或者身材更是加分项。我们想确定的是,哪些因素可以用预测进行量化,哪些仅仅是猜测而没有数据支持。

我大概想了这么几个特征:

约会(目标变量):有女朋友的男生,或者过去五年至少谈了六个月恋爱的男生

是否是国际学生

专业是否为CS、SE或ECE

成绩优异,并找到了牛X的实习

是否幽默健谈

性格是否外向、愿意结交新朋友

是否自信

比我高(175+)

戴不戴眼镜

经常去健身房或喜欢各项运动的人

注重穿衣打扮

长居加拿大或者在加拿大居住工作至少五年

是否为亚裔

你也许注意到其中一些特征太主观了,比如怎么才能规定一个人“有趣”、“幽默”呢?在这个项目中,我将人们分成两部分,用1标记其中一半,另外一半标为0。所以我根据自己对周围人的观察,确定他们找到女朋友的能力。

要说明的是,本文并不属于客观严谨的统计型研究,而是给大家提供一种思路。

为了收集数据,我把每个能想到的同学的信息都制成表格,用1或0代表“是”或“否”,最后共有70个同学信息。注意了,滑铁卢大学的各位,过去两年跟Bai Li说过话的男生,你们可能已经被用作训练数据了哦。

分析过程

首先我们在目标变量Dating上对各种其他变量进行费舍尔精确检验,最终得到三种最重要的变量:

健身——爱健身爱运动的男生比其他男生有女朋友的概率大了两倍(p-value=0.02)

眼镜——不戴眼镜的男生比戴眼镜的男生有女朋友的概率多了70%(p-value=0.08)(睡前别玩手机了!眼保健操做起来啊各位!)

自信——有信心的男森最帅啦(p-value=0.09)

果然妹子们都喜欢身材好、有朝气的男生。不过我有点吃惊戴眼镜竟然这么重要?可能有些人会把戴眼镜和nerd联系起来吧,不过还真的有论文研究过这个问题,结果发现人们确实觉得眼镜会让魅力大打折扣。

有些变量也许可以预测成功约会的概率,但是由于样本数量太少,结果不确定性很大:

国际学生比当地学生成功几率大

亚洲男生比其他种族的男生优势较小

其他因素不变的情况下,CS专业的男生似乎更受欢迎

剩下的类似身高、成绩、穿衣打扮等因素跟能否找女朋友关系不大,就算你去Facebook总部工作,对不起,该单身还是单身。

下面是实验的全部结果:

Variable: international

N(international)=10, N(~international)=60

p(dating|international)=0.60, p(dating|~international)=0.38

p-value=0.299

Variable: cs

N(cs)=56, N(~cs)=14

p(dating|cs)=0.45, p(dating|~cs)=0.29

p-value=0.368

Variable: career

N(career)=46, N(~career)=24

p(dating|career)=0.43, p(dating|~career)=0.38

p-value=0.799

Variable: interesting

N(interesting)=34, N(~interesting)=36

p(dating|interesting)=0.47, p(dating|~interesting)=0.36

p-value=0.467

Variable: social

N(social)=29, N(~social)=41

p(dating|social)=0.45, p(dating|~social)=0.39

p-value=0.806

Variable: confident

N(confident)=37, N(~confident)=33

p(dating|confident)=0.51, p(dating|~confident)=0.30

p-value=0.092

Variable: tall

N(tall)=26, N(~tall)=44

p(dating|tall)=0.46, p(dating|~tall)=0.39

p-value=0.619

Variable: glasses

N(glasses)=41, N(~glasses)=29

p(dating|glasses)=0.32, p(dating|~glasses)=0.55

p-value=0.084

Variable: gym

N(gym)=22, N(~gym)=48

p(dating|gym)=0.64, p(dating|~gym)=0.31

p-value=0.018

Variable: fashion

N(fashion)=17, N(~fashion)=53

p(dating|fashion)=0.41, p(dating|~fashion)=0.42

p-value=1.000

Variable: canada

N(canada)=31, N(~canada)=39

p(dating|canada)=0.42, p(dating|~canada)=0.41

p-value=1.000

Variable: asian

N(asian)=59, N(~asian)=11

p(dating|asian)=0.37, p(dating|~asian)=0.64

p-value=0.181

接着,我们对比了各变量之间的关系,这可以帮助找出错误的模型假设。红点表示正面联系,蓝色表示负面联系。我们只显示出了统计显著性<0.1的关系,所以大部分变量的组合是空白的。

机器学习

如图所示{有女朋友,有自信,健身,不戴眼镜}互相有关。

这里我再强调一下,我统计的信息都是身边的同学,或者同学的同学,专业都是学CS的并不能代表整个滑铁卢大学的学生。

所以任何模型在这个数据上训练都会反映出同样的偏差。未来我会收集更多数据改进模型。

用逻辑回归预测恋爱概率

如何用算法预测找到女朋友的概率呢?让我们搓搓手准备开始吧!

我训练了一个逻辑回归GLM,从各个解释变量的角度预测找到女朋友的概率。利用R中的glmnet和caret包,我用弹性网络正则化训练了一个GLM。然后再用标准网格搜索进行超参数优化,用leave-one-out交叉验证并且在每次迭代中对Kappa系数进行优化。

机器学习

结果模型的ROC曲线上交叉验证的AUC分数为0.673,也就是说,模型的预测还是有点准的,不过其中的不确定性因素仍然很多。最后,我还做了一个简单计算器,大家有兴趣可以玩玩。

机器学习

小编测试了一下,全部选取了“弱势因素”,这个结果可真悲伤

好了啥也不说了,我要去健身房举铁冷静一下,再预约个近视手术了(手动再见)。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分