作者:livan

     来源:数据python战算法

随着工作年限的增长,这一感觉似乎越来越明显,似乎一周七天里面最累的是周一——黑眼圈、惺忪眼、哈气连天,不自觉会想起曾经那个三天网吧,三天课堂的少年。

那么,如何才能预测出一个人的工作恢复能力呢?笔者借着小伙伴的调研,做了简单的探索。有兴趣的小伙伴可以简单试一下,刚好也借这个机会梳理一下常用的机器学习的常用算法,毕竟这个研究的过程,几乎尝试了常见的机器学习算法。

文章的缘起是一个心理学问题,希望能从微博近几个礼拜的数据中找寻到人类的情感波动,并辅以问卷调研的方法探索当下发微博的人的复工程度,由于数据的权限问题,这里只做技术性探讨,后文也会附上代码,如果有兴趣,欢迎大家尝试。

之前在《增长的旋律——AARRR模式思考(三)》文章中曾仔细分析过微博和微信的差异,作为一个线上的公共场所,微博无时无刻不承载着各种网络言论,其中不乏对工作的安排、对生活的情绪,微博也便成为了线上反应各自情绪的数据来源。那么,通过对微博数据的挖掘,能否预测出真实生活中人的行为和状态呢?作为一个数据人,总是希望能够有机会一探究竟,下面我们一起走一遍研究的过程:

P1

数据收集

研究随机圈定了一群经常使用微博的人,收集他们在微博上发表的博文,记录他们的发表时间,发表地点,点赞和评论次数等相关信息,每周为一个单位,持续关注三到四个月的时间,以此来探索被试者的情绪波动,确定被试者在何种情绪下会发出什么样的文字。

为了更全面的探索,研究增加了线下调研的部分,对这些经常使用微博的人进行有偿问卷作答,从工作状况、家庭状况、收入以及睡眠等几个方面设计问卷,并通过心理学的方法探索被试者在心理剥离、放松经验、控制经验等方面的得分,探索用分数的形式表现紧张、愤怒、精力、抑郁等多种情绪。

数据的收集结构如下图:

通过上面的两种思路,我们收集到了一整套完整的数据,涵盖了文本、字符串和数字,经过汇总整理后,我们得到如下表格:

(1)线下调研部分数据样式为:

(2)微博部分数据样式为:

P2

数据处理

观察上面的数据,我们会发现,数据的样式比较多样,有文本形式,有时间值,有数值得分也有字符串等,需要进行较为详细的特征工程,在建模的时候花费大量时间的往往就在这里了:离散值怎么向量化?文本怎么提取语义?怎么做降维处理?怎么归一化?基本步骤都会围绕这些问题进行,对于离散化、归一化和降维处理都是一些常规的做法,在sklearn中会有一些完整的函数:

1)离散化等one-hot处理:

这一处理方法主要应用在特征独立性要求不强的模型中,因为one-hot是将一个特征以向量的方式呈现成多列,这些扩展开的列存在一定的相关性,如果对于特征独立性要求高的模型可以尝试使用WOE计算方法,将各个无法计算的特征(【山东、上海、……】)转化成可以计算的数字。

另外为了便于分类,也会存在将连续的数字拆分成几个离散的值,比如将【1,2,3,4,5,6,7,8,9】等连续值拆分成两类【0,1】,这样的方法往往会用统计学中的一些分箱方法,进行等频分箱或者等额分箱等。

2)降维处理:

降维处理在建模过程中算是必备的一个步骤,经过离散化处理之后,数据特征有可能已经达到1000甚至10000维度,这一数据量直接投放到模型中往往会引发维度爆炸、维度灾难,那如何降维呢?最常用的方法主要有两个:一般机器学习的模型会比较常用主成分分析,神经网络深度学习部分主要是embedding方法,这些方法在降维的效果上不仅能够有效减少维度,更重要的他们能够减少各个特征中大量为零的状态,使模型的训练能更加高效精准。

这两种方法分别在两个包里:

主成分分析在sklearn中的函数为:

estimator = PCA(n_components=num)
pca_X_train = estimator.fit_transform(X_train4)
pca_X_test = estimator.fit_transform(X_test4)
pre_test_Y = y_test[['y_mean']]
pca_train_Y = y_train['y_mean'].tolist()

embedding在keras中的函数为:

model = Sequential()
model.add(Embedding(5000, 512,input_length=100))

讲到embedding不妨多说一句,在深度学习中,embedding、word2vec、dropout、attention被称作是必备组件,可见embedding的地位。

3)特征归一化:

经历过离散化、降维处理之后,有没有发现我们的特征有大有小,来自于各个方向的数据往往存在不同的量纲,直接投放到模型中会存在量级上的差异,千万级别的数据会轻而易举的抹杀掉个位数的特征,导致量级小的特征特性不明显,因此需要进行归一化处理。归一化主要是为了取消掉各个特征之间的量纲,使各个特征统一在一个维度使用。

归一化在sklearn中的函数为:

from sklearn import preprocessing
import numpy as np
X = np.array([[ 1., -1.,  2.],[ 2.,  0.,  0.],[ 0.,  1., -1.]])
X_scaled = preprocessing.scale(X)

归一化的方法除了我们常用的z-score标准化之外,还有min-max标准化,改进的z-score标准化等方法,使用过程中可以根据需要选择相应的方法。

上面的三个处理方法往往是我们建模过程中的标准套路,几乎可以不假思索的应用于所有的特征工程,看到这里的你有没有不解渴的感觉,费这么大功夫写一篇文章,难道连一点特产也没有吗?当然不是,这个模型构建的特色在于对文本的处理,也就是下面我们重点讲的东西:

文本的处理往往是独立于数据挖掘的另外一个领域——NLP,这一领域相对独立但又与模型有千丝万缕的联系,我们来看一下本文中的案例使用了什么独特的方法:

本文采用的方法主要是采用关键词处理的方法,根据博文进行词性分析,根据词性计算各个词片段的得分,进而得出各个关键词的权重分。个人以为,这也是这个研究中比较有特色的一个文本处理方法,不同于我们经常使用的TF-IDF、LDA、HMM隐马、CRF条件随机场等NLP模型。我们来仔细了解一下这一方法:

1)梳理关键词:整理出我们比较关注的关键词,添加到特征工程中,作为特征值,并同时筛选程度词和否定词,作为计算权重的依据;

2)切分词短句:按照微博号汇总每个被试者发表的博文,并将博文按照“,”,“。”等标点符号拆分成一个个的短句,此时每个被试者的博文就会成为一个个带有一定语义的词短句,我们接下来就是要通过对这些短句进行处理,来判断第一步中各个关键词的权重,并作为特征值将其融入到特征工程中。

3)统计关键词词频:遍历每一个词短句,统计其中关键词的频数,如果当下词短句有对应的关键词则记录词频数l1,如果没有对应的关键词,则记为0。

4)计算程度词权重:不同的程度词权重系数不同,比如:“百分之百”、“倍加”等记为2,“多么”、“格外”等记为1.75,“大不了”、“更加”等记为1.5,“多多少少”、“还”等记为0.5,如果没有程度词,则记为1,这样的词汇可以区分出每个被试者在博文中的情绪强弱,并以数字的形式表现出来。

5)计算否定词权重:如果词短句中出现“没有”、“未必”等词语时可以根据需要标记成-1或者-0.5,没有否定词则记为1,通过这个方法来减少词短句的权重。

6)计算关键词权重:基于上面的计算我们将关键词、程度词和否定词汇总在一起,形成我们对应关键词的权重值:

关键词权重=关键词词频+程度词权重*否定词权重

上文中各个词性的词语可以按照项目的需要进行相应的调整,没有统一的规则说是哪些词一定在哪个项下,也没有统一的规则确定每个词性的权重值,具体的数值还是需要在应用的场景中仔细琢磨。

经过上面的描述,各位看官是否对这一特征工程方法有了深入的了解呢?学习的要义在不断的实践,大家有兴趣的话可以基于上面的逻辑进行一些实践,预测一下你的元气值恢复了多少?

理论的描述总是浅显的,下一篇文章中我们将深入探索一下这个方法在案例中的应用,欢迎大家继续阅读。

◆ ◆ ◆  ◆ ◆

长按二维码关注我们


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

猜你喜欢

● 笑死人不偿命的知乎沙雕问题排行榜

● 用Python扒出B站那些“惊为天人”的阿婆主!

● 全球股市跳水大战,谁最坑爹!

● 上万条数据撕开微博热搜的真相!

● 你相信逛B站也能学编程吗

假期过后,你的元气值恢复了多少?(一)相关推荐

  1. 黎明觉醒服务器维护什么时候恢复,黎明觉醒健康值怎么恢复 健康值恢复方法详解...

    黎明觉醒健康值怎么恢复?黎明觉醒中健康值有什么用?在黎明觉醒手游中,许多小伙伴不知道健康值有什么作用,也不知道该如何恢复健康值,下面就为大家详细介绍健康值的恢复方法. 健康值恢复方法详解 在游戏中健康 ...

  2. Unity 休闲游戏体力值恢复

    1.做休闲游戏实现一个体力恢复的功能,当游戏退出离线的时候,体力值也是恢复的,这个时候就需要计算游戏离线了多久. 2.作为测试 我脚本中的R和A分别可以增加体力和减少体力. 3.即使游戏退出,下次进入 ...

  3. 驱动上升级固件和恢复默认值

    文档索引 升级固件需要注意的项目 1.升级键盘固件 2.开始升级 3.切换到BootLoader模式 4.切换到键盘模式 5.恢复默认值 升级固件需要注意的项目 升级时不要操作键盘 最好把背光关闭 不 ...

  4. 年轻人的钱包,被十一假期榨干了

    本文来源:字母榜 ID:wujicaijing 作者:邢思远 十一长假,是打工人一年中难得的大块休闲时光,很多人利用这段时间旅游玩乐,好不惬意.但另一方面,假期间的各种消费开支,也让不少年轻人叫苦不迭 ...

  5. 提升网站信誉度,轻轻松松过假期

    十一假期已毕,但多数人已经回到了工作岗位,对于站长和网站SEOer来说,这个时候最怕的就是看到长假期间排名下降.然而往往长假后总有一些企业站的排名在有效排名期内摇摇欲坠.那么,如何才能够保证网站排名不 ...

  6. 演示:GLBP跟踪功能、权值、与不同的负载均衡方式

    演示:GLBP跟踪功能.权值.与不同的负载均衡方式 演示目标: 1 回忆GLBP与HSRP或者VRRP在转发流量的差异 2 GLBP的优先级和抢占与HSRP或者VRRP优先级和抢占的不同之处 3 GL ...

  7. opencv学习笔记11:图像滤波(均值,方框,高斯,中值)

    为什么要使用滤波 消除图像中的噪声成分叫作图像的平滑化或滤波操作.信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没.因此一个能降低高频成分幅度的滤波 ...

  8. mysql数据库的备份和二进制日志恢复

    mysql备份和bin-log日志 备份数据: mysqldimp -uroot -p  test -l -F '/tmp/test.sql' -l 读锁 -F即flush logs, 可以重新生成的 ...

  9. 1的恢复出厂设置在哪里_罗斯蒙特变送器怎么恢复出厂设置?

    罗斯蒙特变送器怎么恢复出厂设置? 特殊情况下,罗斯蒙特变送器需要恢复出厂设置.罗斯蒙特变送器进行出厂设置的方法非常简单,只需要用手操器或AMS设备管理器就能操作.罗斯蒙特手操器里有一个恢复出厂调整值– ...

最新文章

  1. web初级开发的那些坑
  2. 华为AI再进化,CANN 3.0释放「算力狂魔」
  3. 105.通信同步异步定义及其相关
  4. PetShop 4.0 系列之五 [转]
  5. NSDate根据日期获得当前是周几,以及一年内的第几周,以及一个月内得第几周...
  6. 两个pdf怎么打开成两个窗口_如何将图片合并成PDF?教你两个免费方法
  7. 画瀑布图_常见的招财风水画之含义
  8. linux_bash_shell_cheat_sheet(自译)
  9. 第一季6:海思方案中uboot、kernel和rootfs的烧写方法
  10. Scrapy开发指南
  11. visual studio 删除附加项
  12. 多个apple苹果设备(iphone,mac,pad,icloud)之间同步数据
  13. 君正X1000开发板/方案开发介绍
  14. python驾到~障碍通通闪开,美女批量入内存~
  15. 微博实时话题和搜索微博实时抓取
  16. ARM学习(12)基于arm架构的嵌入式操作系统理解
  17. 1.4 Git基本操作之删除文件找回及文件比较
  18. sqlServer服务器名称
  19. mongotemplate mongodb的各种操作 模糊查询 精确查询 等等
  20. python手机壁纸超清_python爬虫 爬取超清壁纸代码实例

热门文章

  1. 【金阳光测试独家播出】-IOS专项测试体系预告-7.20号更新第一集
  2. jquery自定义函数
  3. C# EF框架使用实例
  4. Java进阶之验证码知识点总结
  5. pythonxy官网下载_GitHub - holif/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...
  6. 单样本KS检验,案例分析及Matlab可视化
  7. android开发actionbar,Android开发之自定义ActionBar和TitleBar
  8. 一星期学sql day1
  9. Spyder画图时图像弹窗窗口设置
  10. Linux(ubuntu) LNMP环境搭建