教你免费获取Coursera上优质学习资源&证书,轻松入门机器学习

Coursera上有许多优秀的学习资源,想必大家早有耳闻。
但是注册了账号之后会发现,想在Coursera上学习存在2个问题:

  • 视频课虽可以随便看,但是想要完整的学习体验(随堂测验、编程作业、论坛讨论、获取证书),需要付费,且动辄上百美金,国内普通家境且没有固定收入的学生吃不消。
  • 视频是全英文讲解,部分视频虽有中文字幕,但偶尔也会出现中文字幕缺失,断档的情况。
  • C站服务器在国外,站点偶尔抽风,看不了课程。

我目前是跟着吴恩达教授的Machine Learning课程进行学习,已经学到了第四周,有不少经验和想法,特此汇成一篇文章供大家参考,希望对大家有所帮助。

1.申请奖学金

想要稳扎稳打夯实基础,认认真真完成线上课程却又囊中羞涩?
Coursera很友善的给予了【奖学金】给一途径给好学的同学们,步骤如下:
这里以Deep Learning(https://www.coursera.org/specializations/deep-learning )为例,打开你想要报读的课程页面,找到“Apply for Financial Aid”

如果等不及的话,点击上方的Enroll可以提前听课。

点击后,填写一个类似承诺书的表单。

再接着,就是填写个人信息,包括教育背景、年收入、职业情况和一个对于费用的小调查。
接下来就要写英语小作文了,每篇至少150字。
第一个题目:为什么要申请助学金?
第二个题目:该课程对您的职业生涯有什么帮助?
大家按照自己的实际情况写就行了,可以写一下家庭情况,家庭收入,个人收入情况,目前学习遇到的瓶颈,个人职业期望,在读学生来阐述自己情况的话还是很好通关的。(善良的C站,感动哭)填完后点击提交,等待15天就能出结果啦!

2.对付站点抽风的几个策略

1.如果发现访问页面没有问题,但是视频总是加载不出,我们需要修改host。此处以WIN10系统举例。
在开始菜单找到记事本,右键-以管理员身份运行

点击左上角,文件-打开,找到以下路径:

打开host文件,在文件末尾添加以下几行:

52.84.246.90    d3c33hcgiwev3.cloudfront.net
52.84.246.252    d3c33hcgiwev3.cloudfront.net
52.84.246.144    d3c33hcgiwev3.cloudfront.net
52.84.246.72    d3c33hcgiwev3.cloudfront.net
52.84.246.106    d3c33hcgiwev3.cloudfront.net
52.84.246.135    d3c33hcgiwev3.cloudfront.net
52.84.246.114    d3c33hcgiwev3.cloudfront.net
52.84.246.90    d3c33hcgiwev3.cloudfront.net
52.84.246.227    d3c33hcgiwev3.cloudfront.net
192.168.238.1 windows10.microdone.cn

保存。
接着,打开命令行窗口,按WIN+R,打开cmd

在窗口输入命令:

ipconfig/flushdns

刷新DNS解析缓存。
接着就可以安心观看C站视频了。

2.C站有的时候抽风,是因为emmmm。。。
比如我今天打开站点,是这样的:

CSS样式都没加载出来。
虽然据说有放服务器在国内了,但还是不可避免间歇性抽风。
这时候大家自行全局模式。
或者等两天,自己就会恢复了。

3.字幕问题

就以我现在正在学习的机器学习课程为例,虽然可选中文字幕,但偶尔会碰到残缺的中文字幕,比如这样:

或者这样。。

正常的完整字幕是有字幕组标识的,像这样:

不过还好,我找到了B站资源,中国海洋大学黄海广博士翻译,UP主压制视频,帮了大忙了。链接如下:
吴恩达机器学习:https://www.bilibili.com/video/av9912938/
可惜UP主的深度学习的课程迫于压力已下架。网易云课堂那边同样有吴恩达机器学习和深度学习的中文视频,机器学习的内容仅到第三周,很久没更新了,深度学习的内容倒是已全部上线,大家可以配合C站使用:
网易云课堂-深度学习:https://mooc.study.163.com/smartSpec/detail/1001319001.htm

总结

目前所有经验就到这里啦,机器学习的作业详解我也会持续更新。
有问题欢迎私信或评论区留言,有兴趣可以加群讨论:

最后,感谢陌生网友们的付出,帮助千千万万对这行感兴趣的人能够轻松获取优质教育资源而不被各种来路不明的教育机构蒙蔽双眼。
祝好。

Reference:
[1]【超实用教学文】线上课程平台Coursera奖学金申请秘辛!上课交作业还能「免费」拿名校证书:https://buzzorange.com/techorange/2017/09/11/how-to-apply-coursera-financial-aids/
[2] coursera 视频总是缓冲或者无法观看,有什么方法解决?https://www.zhihu.com/question/29433255

Andrew Ng机器学习week 2(Linear Regression)编程作业详解

先介绍一下,编程作业分为两部分,必做和选做。

必做部分通过ex1.m来作为主函数执行,选做部分通过ex1_multi.m作为主函数执行。

必做的部分包括提交练习,单参数的梯度优化实践,全部做完 本周就算通过了,系统会给你的程序打分。选做部分是多参数的梯度优化实践,正规方程实践,做完了不会打分,只会显示“Nice work!”

 

1.Simple Octave/MATLAB function

首先是一个简单的示例,这个在视频中有示范过。

在warmUpExercise.m文件中编辑:
A = eye(5);

保存之后,在Octave窗口中输入“ex1”来执行文件。

输出的一个是一个5*5的单位矩阵。(emmmm….不知道为什么我的单位矩阵是歪的)

这步完成之后,可以根据视频里的提交步骤尝试进行第一次作业提交。

2.Linear regression with one variable

下一步,我们尝试用Octave绘图。

根据指导文件的提示,我们在plotData.m文件中写上:

plot(x, y, 'rx', 'MarkerSize', 10);      %Plot the data
ylabel('Profit in $10,000s');            %Set the y-axis label
xlabel('Population of City in 10,000s'); %Set the x-axis label

plot是绘图函数,因为这里是单参数,所以X和y都是m维的向量,“rx”表示用红色叉号符来标记数据,“MakerSize”指定标识符大小,绘制出离散的点。

保存,再回到Octave的命令窗口界面运行“ex1”,可以得到下图:

把数据准备好了,我们要计算代价函数了,这里主要用到了两个公式:

这一步开始,指导文件中不会再给出代码了,你要自己思考怎么通过公式实现功能。

我们先通过computeCost.m来计算损失函数J(θ)

根据文件中给出的两个条件,再结合已知的公式,还是很容易能推算出这一步的程序。在这个文件中,输入以下代码能过关:

J = (sum ((X * theta - y) .^ 2)) / (2*m)

注意运用括号规定运算顺序。

如果代价函数J没算错的话,

当θ取[0;0]的时候,J=32.073

θ取[-1;2]的时候,J=54.242

代价函数算好,终于要来实践梯度下降了。这里我们用到了以下这个公式:

按这个式子的话,用以下这行代码可以通关:

theta = theta - (alpha/m) * (X' * (X * theta - y ));

但是我当初做的时候有点懵逼,主要是没想通最后一个x到底是什么,该怎么乘上去。

我绕了点路,根据网上查到的做法反向推理,再结合自己的笔记,找到了这个式子:

用这个式子的话,就是以下这部分代码:

temp_theta = theta;  % Save the theta from the last iteration
% Update theta0  
theta(1) = temp_theta(1) - (alpha/m) * (sum(X * temp_theta - y));
%Update theta1
theta(2) = temp_theta(2) - (alpha/m) * (sum((X * temp_theta - y) .* X(:,2)));

Octave里头是从1开始计数的,所以是theta(1),theta(2),从我们CS学科的通用理解,其实就是θ(0)和θ(1)。但是要注意一下,这段代码,只能在单因素的时候用,下一部分多因素假设,是不能用这段代码求θ的。

这步完成,我们就能看到拟合出来的结果啦!

执行过程中我们可以观察到J不断下降,直至数值渐渐平稳。

接着我们就可以在屏幕上看到通过我们的程序,得到的预测结果:

可以打开ex1data1.txt文件,扫一眼数值大小,还是可以看出我们的估计算是比较靠谱的。

接下来不用你动手改代码,继续执行ex1,会展示一个网格图,这个图是根据你刚刚编写的computeCost函数,不断迭代J的值得到的效果,绘图函数卸载ex1.m里,可以找到。

在我没搞清楚computeCost函数怎么写的时候,尝试过执行到这一步,图二的红叉叉很明显没到中间的位置,只有现在这么写了,才会回到中间,也就意味着我得到局部最小值了。

不过我的图一颜色没有引导文件里那么丰富多彩,不清楚是为什么,希望有执行出彩虹色的同学可以指正一下我的错误点。

 

以上,必做部分结束。

3.Linear regression with multiple variable

接下来是选做部分,我们要开始尝试多因素的假设。

这里用的示例数据和视频课里比较接近,ex1data2.txt里是房屋的面积、房间数和房屋价格。

首先,根据视频课的内容我们知道,如果要对多因素假设使用梯度下降,必须先对数据进行特征缩放。

“我们通过让每个输入值在大致相同的范围内加速梯度下降。因为θ会在小范围内迅速下降,在大范围内缓慢下降。当变量非常不均匀的时候,θ会低效地下降到最佳值(可能要反复迂回才能达到局部最小)

目的就是使偏移状态减轻。缩小参数落在的区间。

这里我们在featureNormalize.m函数中实现该功能,用到的公式如下:

根据提示,在Octave中可以使用mean函数求得平均值,使用std函数求得标准偏差。填入以下这段代码可以通关:

len = length(X);
mu = mean(X);
sigma = std(X);
X_norm = (X - ones(len, 1) * mu) ./ (ones(len, 1) * sigma);

保存后,执行ex1_multi.m文件,查看效果。

特征缩放之前的数据。

特征缩放之后。

然后我们可以去修改computeCostMulti.m和gradientDescentMulti.m这两个函数了,如果在上一部分你填入的执行模块是通用的话,在这段直接复制进来就好。

引导文件里多提了一句,在多因素假设下,损失函数也可以用下面这个矢量化形式得出:

那么转换成代码,就是这样表示:

J = (((X * theta) - y)') * ((X * theta) - y) / (2*m)

我试了一下,的确算出来一样。

下一步,我们选择最佳的学习率α。

ex1_multi.m中,默认的α大小为0.01(在大概80几行设置),我们可以通过调整这个值观察不同学习率下图像效果。引导文件中给了一个推荐的图像,是迭代50次的效果图。源代码中设置的是迭代400次,我这里也跟着教程修改了一下。

最后,学习率α调到0.13的时候,和引导文件给出的图像比较相近。

 

接下来,我们要自己写预测价格那一块,要求预测1650公顷,3个房间的房子的价格。

仿照上一节中的代码,可以轻松写出代码:

price = [1 1650 3] * theta; % You should change this

但是我发现了一个很大的问题,就是我得出的数据明显比给出的示例图要大个三次的数量级,最后预测出来的结果也异常的大。这是我写这篇详解的动力所在。。。希望实践到这步的你们,能找出我的错误,在评论区或者私信联系我。

视频中还提到另外一种方案,能够一次性求解θ的最优值——正规方程(Normal Equation)。这步直接给出了公式,转换成代码也很简单,在normalEqn.m中增加如下代码即可:
theta = (pinv(X' * X)) * X' * y;

轻松求得预测结果。这里我和数据集比对了一下,还是比较相近的,可信度高。

参考博客:

http://www.cnblogs.com/arcticant/p/3403010.html

http://www.voidcn.com/article/p-cuqfutia-oe.html

4.总结

到这里,Week2的作业就详解完毕了。

完整的代码更新在我的Github上:https://github.com/nutllwhy/Machine-Learning

我是通过Coursera申请奖学金获得的免费学习资源,包括视频课,作业等,完成所有课程之后会颁发一个有一定认证力度的证书。

至于如何使用Coursera,我打算等全部学完之后,再写一篇告知大家。

欢迎讨论。

 

 

 

写在23岁第一天的一些碎碎念

22岁的最后一天我过得十分慌乱。

房间里电力猫总是不听使唤,重新配对,重启,上上下下跑了好多次,还是不行,无奈只好连一楼信号不那么好的wifi,寻思着明天要把电力猫退货。
在知乎上写了一个回答,好多人追着我要链接,本来不想给,因为做零售真的很麻烦,吃力不讨好,但是耐不住那么多人诉求,一时心软,还是打算建个群帮大家采购。
拉群是个麻烦事,超过100人无法扫码进群,手动拉群效率极低。我想到之前见余老师开机器人自动拉群,于是自己上网找代码实现。因为电脑里有python2、pyhton3两个版本,之前没完全适配好,pip3不能用,又倒腾了一番才找到解决方案。然后实现了一段网上别人的代码,刚成功没一会儿,就bug了,怎么重启都没用。看着不断上涨的好友请求数,整个人一下就乱了,想向余老师求助,没有回音,难过了一会儿,静下来找关键字,才知道是微信把端口给封了。
发现这条路走死的时候,老师又传来紧急任务,突然要大家交一个文件,我在改文档和寻找Bug根源之间切换,慌乱中提交了文档,突然手机屏幕亮起,是一个知友的私信,祝我生日快乐。
我看了一眼时间,已经00:03
我变得非常失落,看着知友发来的消息泣不成声。谁能想到,23岁第一声问候是来自一个陌生人呢。
毕竟,身边没有人记得我生日啊。
当发现期盼喜欢的人给我发一句生日快乐都是奢求的时候,情绪完全失控。
23岁的开始,是有些狼狈了。
在朋友圈和想法牢骚了几句,继续埋头想办法解决问题。
一个认识了好多年的网友,突然给我塞了一个大红包,我受宠若惊,不知道该怎么谢好,瞬间崩盘,把心里难受的想法都和她说了。她耐心安慰我,开导我,鼓励我,真的像个仙女一样。
QQ消息弹出,是一个音乐文件,我一看,是之前加的一个弹吉他的知友,看到我的想法,专门弹录了一首生日快乐。写这篇文章的时候,我正在单曲循环。
一下子,心里的冰雪都被琴弦弹开。
还有一些今天加我微信的知友,从微信号上注意到今天是我生日,也纷纷给我发来祝福。
在22岁,我失去了以为可以相处一辈子的好朋友,失去了以为可以在一起一辈子的男孩子。
因为不断的失去,我诚惶诚恐,害怕是不是因为自己不够好,所以他们要离我而去,才想要八面玲珑。
我想要变好,如果我什么都做得好,你们是不是就不会丢下我。
大概来自陌生人的善意,最是情怀吧。
其实我做评测都是自掏腰包,写点评看心情,录视频从录到剪到配音都是一个人,知乎也没人找我发广告,纯凭兴趣在往外传播东西,分享吃过的美食,分享一天的心情,分享经验经历感想。哪怕是做团购,一斤也就挣个两三块,有时候还贴邮费,总被妈妈训是在做亏本买卖。
但是经历刚刚的几个小时,我想,哪怕像个傻瓜,还是要保持对世界的善意。
就如今天遇到的人们,对待我的善意一般。
这个世界这么大,有幸遇到你们,感知片刻温暖,已经很知足。
谢谢,真的谢谢。

2017年终总结

一月

回家,到店里帮忙。顺便涉足网店,自己进货,拍照,宣传,包装,发货。年末大家都想采购年货,需求量很大。因为家里的关系,能拿到性价比高的货源。靠着微店,一个月大概盈利了3000,一直发货到了快递不能发的那天。明白了爸妈的辛苦,大冬天来往于仓库与店面,生理期爬到几米高的地方,一箱一箱的搬货,在店里抱着热水袋,冷得瑟瑟发抖。

二月

失恋,消沉了很久。自我怀疑,自我反思。2月22日回到学校,立刻办了健身房的卡,开始健身房摸索之旅。一个礼拜后,小仙女加入队伍。又过了一个礼拜,三金和郭师傅加入队伍,从此有了顺风车可以搭乘,省去赶班车的麻烦。

三月

马甲线恢复,开始认真给食物拍照。出了国家线,复试也基本稳了。开始尝试倒立。一半失意,一半希望自己振作。三月底拍了毕业照。写完了本体的综述。因为要给老师做智能会议的CFP,学会了用INDESIGN排版和PS的基础用法。因为要给老师剪视频,学会了AE和PR基本用法。

四月

第一次写小论文,清明节没回家。因为English Writing太差被吐槽了,心里有点难受,压力很大,觉得自己写不出,deadline前一天边洗澡边哭。后调整心情,继续坚持去健身房。第一次写爬虫,踩了很多坑,啃掉了学长推荐的Selenium 2自动化测试实战,会了一点点Python语法。达成KEEP 10000分钟成就。在朋友的引荐下第一次进录音棚,见到了配DVA的陶典姐姐,配了战舰少女R的撒切尔号,非常开心。买了南小鸟觉醒旗袍,第一次去漫展出cos。

五月

拔草了很多家店,发了很多美食相关的微博,持续记录饮食和去健身房。和Mace姐姐去了另一个录音棚,配了小忍者哈特利的群杂。在录音棚试了另外一个手游的角色,被老板吐槽不会笑不会哭不会死,基本功太差,和角色失之交臂。玩了一段时间word2vec,喂了某科技论坛的所有文章,毕业设计顺利答辩,完成毕业论文。

六月

毕业旅行去了北京,吃了很多好吃的。在知乎上写了一篇稻香村的糕点打分,得到了两个网友的赞助。毕业典礼,搬家租房。

七月

开始每天自己做健身餐便当带去实验室,囤了20斤冷冻鸡胸肉和3斤秋葵,研究了许多鸡胸肉和秋葵的吃法,自己买菜,做三餐,拍照,发微博,得到了几个健身饮食大V的转发,涨了一些粉。学会骑电动车,摔了两次,吃了一次罚单。拿到配音的工资。初步完成第一篇大论文。博客差点宕机,靠着朋友的帮助找回来。依旧保持去健身房的节奏,入了蛋白粉和摇摇杯。去了China joy,面基了一些网友。

八月

去了第一场KEEP × Modern Sky的活动,被狂虐,练完身上疼了两天。第一次现场听后摇和红花会的live,氛围非常棒。电动车还给学弟,开始骑车来回租房和实验室,因为论文每天会留到很晚,偶尔遇上下雨天会非常无助,心理情绪不太稳定。有了脱单的想法,在知乎发了一篇回答,认识了许多优秀的人。微博上通过了美食博主的认证。帮学弟的忙,在亚宠展工作了几天,累,但是能见到许多猫猫狗狗,还是感到非常幸福。

九月

刷了两季冰与火之歌,开学忙起来之后就没刷了。健身餐便当越做越好吃,开始不局限于西式做法,研究中式的健身餐。研究生开学,搬宿舍,新室友都很友好。持续肝论文。肝完去了第二场KEEP × Modern Sky活动,被表妹放了鸽子,因为太晚一个人不合适在外面乱晃,没能听到满舒克的现场,很可惜。新家开始装修。持续收到一些美食社区的邀请入驻。

十月

和小仙女去了简单生活音乐节,听了朴树、鹿先森乐队、彩虹室内合唱团、逃跑计划的现场。学校举办学术会议,稍微有点忙。和桃宝&媛媛去了西塘汉服节,临时还改计划夜游迪士尼,算是过了一把万圣节。听了桃宝的创业计划,她邀请我毕业后加入。和余老师聊了一整个月,芳心暗许XD

十一月

去饿了么conf,和余老师面基,莽莽撞撞就在一起了,整个月都非常幸福。献了血。第一次接软文,写得不太好,被举报了orz。剪了短发。第一次去杭州,和余老师一起吃胖了好几斤。

十二月

烂脸了+身体一直有点问题,跑了几次医院。和余老师一起去了谷歌开发者大会和杭州的阿里D2前端大会,感触颇深。在会上见到了李飞飞,非常激动,甚至有一点点想当女科学家。和某人决裂,主动退出圈子,不作回应。心里非常痛苦了一段时间,也因为情绪不稳定做了一些错事,很快反思到自己是错误的。另外看清了身边一些人的面貌,对人际关系看淡许多。2017的最后几天终于从深渊里把自己找回来,收拾心情,好好面对新的一年。

这一年收获很多,写了很多东西,勉强成了知乎一个小V,多了5000+的粉丝量,微博靠着发健身餐和知乎的连带关系增了2000+粉丝。和旧的恋情告别,有了新的伴侣。和旧的友情告别,学会独自处理负面情绪。越发清晰自己的性格缺陷,心态上有了很大的成长。思考重新规划自己的职业定位和成长路径。也逐渐感受到,父母开始老了,越发需要我的关心和照顾。

成长都是带着伤痛的,没有不吃一点苦就能快速成长的。所以我还是,非常感谢这一年里,所有自己受到的挫折,所有主动离开我,和伤害我的人。当然也很感激,自己不那么好,却还是有人愿意陪伴着我,理解我,相信我。我不会再想着去挽回那些已经走了的人,我只会更加努力,去报答那些还在我身边,爱着我,支持着我的人。

新的一年,希望可以突破自己的极限,去尝试自己曾经觉得做不到的事。为自己的热爱投入更多时间,而不是总找借口逃避。学会变得温和坚定,少一些毛躁,多一些执着。说话慢一些,过一遍大脑,反思哪些该说,哪些不该说,尽可能的保护自己。

最后,去努力成为,自己想要成为的样子。

 

 

Python+Selenium爬坑记录——煮机网爬虫

现在的目标是使用Python+Selenium完成一个本体指导智能爬虫的工具。目标网站为煮机网。

流程如下:
1、把煮机网上所有文章爬取下来,一共2000篇,对每篇文章进行爬取、分词、存储工作。
2、对文章进行打分
3、对打好分的文章进行排序
4、人工分析,多少分以上的文章是可靠的,设定分数标准,将低于标准的文章删除
分词使用的是结巴分词器,使用方法如下:
import jieba
header_mode = jieba.cut(header)
对于怎么创建、写入文档,也找了一下方法,最后发现以下代码可以实现:
f = open(header,"w")
f.write(str(content_mode))
f.close()
在第二行,一开始写的是f.write(content_mode),出现报错:TypeError: expected a string or other character buffer object
网上搜了一下,是类型问题,要写入的话必须是str类型的,转换一下就OK了。
但是打开看了一下,并没有成功写入,文档里只有一行:<generator object cut at 0x00000000037B1870>
不知道是什么错,尝试改成f.write(str(content)),出现新报错:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-32: ordinal not in range(128)
在其他人的博客(http://wangye.org/blog/archives/629/)里找到了答案,似乎是因为编码问题,Unicode编码与ASCII编码不兼容,通过以下三行代码可以解决:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
同时,再去文档里看,已经解决,文本内容可以成功写入文档。
实现了以上基本的动作,现在我考虑把功能连起来。首先我在想,如何把一整个页面的10篇文章内容都download下来。
这里我写了一个函数,专门用来获取页面上的文本并下载。
def download_text():
    elements = driver.find_elements_by_class_name("entry-title")
    for element in elements:
        element.click()
        sleep(2)
        header = driver.find_element_by_class_name("entry-title").text
        content = driver.find_element_by_class_name("entry-content").text
        header_mode = jieba.cut(header)
        content_mode = jieba.cut(content)
        print(" ".join(header_mode))
        print(" ".join(content_mode))
        sleep(2)
        f = open(header, "w")
        f.write(str(content))
        f.close()
在寻找的方法的时候,发现煮机网上,每篇文章都是存在“下一页”按钮的,可以直接跳转到下一篇文章,大大简化了爬虫步骤,在方法里加个下一步就可以了。于是我把访问第一页和下载文档分开来,这时download_text方法改成了下面的样子:
def download_text():
    header = driver.find_element_by_class_name("entry-title").text
    content = driver.find_element_by_class_name("entry-content").text
    header_mode = jieba.cut(header)
    content_mode = jieba.cut(content)
    print(" ".join(header_mode))
    print(" ".join(content_mode))
    f = open(header, "w")
    f.write(str(content))
    f.close()
煮机网因为快要倒闭(。。。)所以页面结构比较简单,class单一好爬,所以我定位直接用class_name了。
然后写了个循环:
next_page = driver.find_element_by_class_name("nav-title-icon-wrapper")
while (next_page):
    next_page.click()
    sleep(5)
    download_text()
    sleep(5)
    next_page = driver.find_element_by_class_name("nav-title-icon-wrapper")
 到这里可以实现把煮机网上所有文章都爬下来的功能了,不过如果网络不太好的话就会停止爬虫了,比较麻烦,后期再考虑怎么改了。

台湾大学机器学习——课程笔记(5~8)

从这里开始有所深入,会涉及到很多数学公式的推倒,有一定的难度,也难免费心,有的部分需要反复多看几次。

————————————————————————————————

第五章:

5-1训练和测试的过程到底有什么不一样

Learning在某些情况下是可行的
为什么机器可以学到东西?
Learning流程图:
如果hypothesis不是很大,Ein和Eout就可以很相近
选一个Ein最低的,如果很接近0的话,那么Eout也可以很接近0,这样我们就达到了Learnig的效果
必须保证:Ein要很接近0
两个核心问题:要保证,拿一个新的资料去验证我们已经学习过的模型,可以保持一个比较吻合的状态
这里我们把learning拆成了两个问题:
1、Ein和Eout到底会不会接近
2、有连接的话,如何让Ein变得越小越好
问:M(hypothesis的大小)和这两个问题有什么关系
1、M相对比较小:选择太少了,但是坏事情发生的几率也可以很小
2、M相对比较大:选择多了,但是坏事情发生的几率也增加了
结论:M很重要,选择正确的M是与我们Learning的效果有关系
无限多的M显然是不好的
我们要想办法解决无限大的M到底发生什么事
我们要把M换成有限的数量(不一定可以换)
如果可以换的话,我们就可以用m(一个有限的数量)来替代M
m和M有很类似的角色,来告诉我们未来该怎么选择hypothesis
目标:有学习的效果
5-2 M是如何推倒来的
union bound连级
问题:当我们加无限多个项的时候,有可能就会跑去无限大的数字去
这个bound到底出了什么问题?
原理:坏事情不太会重叠
若我们今天有两个很接近的hypothesis,他的Ein和Eout就会很接近
那么坏事情就会很接近,叠起来,可是我们使用union bound的时候,我们没有考虑叠加的情况,所以导致我们无法处理无限大的情况
解决:我们要找出重叠的部分
我们能不能把无限多的hypothesis分类,然后去找哪些部分有重叠。
只有一个点的情况:这直接上只有两种线,一种说x1是圈圈,另一种说x1是叉叉
有两个点的情况:有四种线
有三个点的情况:八种线
若把三个点放在同一条线上:只有六种线
四个点:14种(最多)
用有限的数字取代N,当你的N够大的时候,坏事发生的几率会很接近0,
Ein和Eout很接近,可以说学习成功了
5-3 
hypothesis和dichotomy的区别:
D是对特定动作的区别
H:可能有无线多条
D:代表有几种不一样的组合(最多就是2的n次方那么多种)
想要移除对x的依赖
mh(将要取代M,与hypothesis有关)
我们到底能不能写出函数
设定一个门槛值Positive Ray:决定了hypothesis
可以切出多少种不一样的dichotomy:N+1
用竖线切出N+1个区块
想象hypothesis是一维的输入 ->Positive Interval
成长函数:
 5-4 Break Point
我们想要用m取代M
我们的成长函数到底是多项式,还是指数?
找出成长函数里面第一个看起来有希望的点,这个点就是Break Point
convex sets没有Break Point
是不是Break Point有一线曙光的时候,成长函数成长的速度和函数一样快
——————————————————————————————————
第六章:
6-1 举一反三的理论

如果M跑到无限大去,我们就无法实现学习了,所以我们在找m
我们希望m增长缓慢,能够取代掉长得很快的M
m成长函数最多能够产生多少种dichotomy
positive rays:一维
成长函数在2个点的时候只能产生3中可能性 break point在2
positive intervals:不能处理叉叉在中间,圈圈在外面的情况,break point在3
convex set:在二维平面上,在凸的集合里面是圈圈,外面是叉叉,没有break point
2D perceptrons:四个点对称对望,break point 在4
只要一开始是break point,那之后的k+1,k+2。。。都是break point
约定:任意两个点不能shatter
6-2 Bounding Fuction
不想成长函数到底什么样子,而去思考排列组合上到底可以有多少种
证明:B(N,k)<=
N:有几个点
k:break point漏出一线曙光的地方
当N和k的值一模一样的时候,B(N,k) = 2`N – 1
6-3 
想办法把B(4,3)和B(3,?)找出联系
橘色的解都是放闪光的(成双成对)
还有三个是形单影只的
B(4,3) = 11 = 2α + β
α+β:dichotomies on (x1,x2,x3)
任意三个点不能shatter,最多最多B(3,3)
B(N,k) <= B(N-1,k) + B(N-1,k-1)
从成长函数,到上限函数,到上限的上限
 成长函数会被上限函数Bound住,上限函数,会被上限的上限函数Bound住……
6-4 A Pictorial Proof
Ein只有有限个(和data有关)。Eout是无限多个。
现在想做的就是将Eout也变成有限多个。
Eout什么时候会是有限多个?
把Eout换成Ein`
————————————————————————————————
第七章:
7-1 VC Dimension

复习:举一反三的学说 Theory of Generalization
成长函数会被上限函数Bound住,上限函数会被多项式函数Bound住,多项式的最高项是N的k-1次方
VC Bound:坏事情的几率很小很小
不管我们的演算法作了什么选择,都可以说我们的演算法做的选择受支配
我们可以把成长函数代换成上限的上限函数
本来我们就假设N够大,k要>=3
如果k比3小,那就不能用N的k-1次方这个Bound
几个条件让我们Learning做得到
1、要有个好的成长函数
2、要N足够大
3、一个好的演算法
VC Dimension(VC维度)是什么呢?
给最大的非break point的昵称
如果break point不存在,那么VC Dimension就是无限大
四种不同的VC Dimensions分析:
一个好的hypothesis,Ein和Eout会接近,并且和你选择的演算法是没有关系的
和你的资料有什么distribution产生没有关系
和你的目标长什么样子也没有关系

7-2 VC Dimension的感知器
在多维的情况,演算法发生了什么事情?
一维:dVC = 2
二维:dVC = 3
d维:dVC = d+1
一组特别的资料,有d+1笔
反矩阵存在,且唯一
给任意一种排列组合,y都能做到X*w之后取正负号等于y
如果2,3是圈,1是×,那x4一定大于0
线性依赖的关系会限制dichotomy
对于一般的资料:
d+2这个向量一定是正的
前面都会限定了,那么最后一个也会被限定
7-3 有效二元分类自由度
两个老问题:
1、Ein和Eout是否够接近
2、Ein是否足够小
small M:坏事情几率很小,但是Ein没有办法做到很小
large M :Ein很小,但是坏事情发生的几率变大啦
small dVC:坏事情几率很小,但是Ein没有办法做到很小
large dVC:自由度很高,我们可以选到一个比较小的Ein,但是坏事情发生几率变大
7-4
有很高的机会,Ein和Eout的差别会被限制在这个根号里面:
 model complexity:随着dVC变大,越来越大
out-of-sample error:先下降,后上升,最好的Ein在中间
VC Bound -> Sample Complexity
资料越多,坏事情发生的几率越小
VC Bound到底有多宽松
我们使用了Union Bound在最差的地方
虽然VC Bound非常宽松,但是要做到和VC Bound一样的话,很难很难
对于所有hypothesis,宽松的程度是差不多的
VC Bound背后的哲学意义到底是什么?
————————————————————————————————
第八章
8-1杂讯和错误

如果在图里加上了noise会不会有影响?
例如:
noise in y:一个好的顾客,但是没给信用卡
noise in y:两个一样的顾客,但是没给其中一个人信用卡
noise in x:顾客的资料不精准
VC Bound的核心是什么?
我们有一个罐子,但是我们不知道罐子里有多少橘色的弹珠->我们犯错误的地方
想象:罐子中有变色龙弹珠,有的时候会变来变去
y也是取样来的
目标分布:告诉我们,对每一个点,mini-target是多少
PLX:常常会被simple到
8-2 错误的评估
怎么样说服人家,相信我们的g和f是很像的
到底我们要怎么打分数
g的特性:
out-of-sample:在样本之外吻合的情况
pointwise:我们可以在每一个x上面衡量,做抽样的平均
classification:我们做的到底对还是不对
zero-one:0,1的错误方式,不是0就是1
squared error:很多时候我们做的错误衡量可以和之前一样,考虑每个点上的正确还是错误,然后做了一个在out-of-sample上的平均
每个点上错误的方式
用err来做代表
in-sample:我们在每个点上衡量错误的状况
out-of-sample:在有noise的状况上,衡量g和y的差别
在未来课程中我们还是会采用这种err的方式,集中在Pointwise的方式
1、0/1分布
2、squared error平方的错误:预测的y和我们想要的y到底差多远->隔得越远,跑得越快,通常用在预测实数的问题。使用错误的距离和错误距离的平方
错误衡量会影响到我们最好的那个f长什么样子
错误衡量会用来看看g好还是不好
结论:错误衡量是很重要的部分
8-3 错误衡量的算法
错误衡量哪里来?
想象:你要做一个指纹辨识的应用
分类器:+1:是你  -1:不是你
分类器可能会犯两种错误:
1、 false accept
2、 false reject
应用:在超市里通过指纹决定要不要给顾客打折
false reject:让顾客不高兴,损失未来的效益
false accept:失去一点点盈利,留下指纹
应用2:CIA辨识某个人可不可以进入系统查看机密
false reject:非常严重的失误
false accept:员工不太高兴,但是没什么损失
结论:不同的错误会想要不同的错误衡量
设计算法的时候就要想办法把不同的错误衡量方式用进去
用替代的方式:找一些有意义的错误衡量
杂讯的量很少,
平方:高斯的杂讯——平方项会在中间出现,找出最小的高斯杂讯
采用friendly:采用比较好设计演算法,寻求Ein会越来越小
err hat(err上面带个帽子)对演算法是很重要的
err是我们真正的应用程式的目标
8-4 衡量分类
每个case都有不同的配分
成本矩阵(错误矩阵、损失矩阵)
难题:我们要让Ein越来越小,加上VC可以用的话,我们就可以相信Eout会和Ein越来越接近
问题:对加权的Ein来说,它理论上的保障可靠与否
修改pocket演算法,让它和原来的pocket有一样的保证
问题:如果-1有错,就算他1000倍错误,+1有错就算他1倍错误
想象:拿到另外一组资料,+1,不管,-1的话,复制1000倍
想办法在新的办法上把每一种错误都收一块钱的方法做好(0/1)
考虑权重的pocket方法
拜访权重高的点的几率要增加

台湾大学机器学习——课程笔记(1~4)

为了监督自己专心理解视频课,会在看视频课的同时使用为知笔记。

台大的机器学习课程可能是目前国内用户最好理解的机器学习课程(别的推荐课程基本上都是英文讲述),林教授非常可爱,台湾腔特别萌(大概是我一直看下去的动力)

基础理论课程一共16章,所以我分四次发布笔记,算是自己的一个记录,也算是对其他观看这套课程的同学一点微小的辅助。

PS:不太完整的地方,大概是我犯困或者分心了orz

——————————————————————————————————

第一章:

1-1

红色代表危险,蓝色代表不危险(什么时候使用机器学习是危险的or不危险的)

机器学习:理论与实用相结合
1-2 我们什么时候要用机器学习
问:什么是学习? ——看书、上课、模仿    共通性:从观察出发
观察到的东西:资料
将资料拿来,应用,变成自己的东西的过程
机器学习就是在模仿这个过程
技巧是什么?增进某一种表现的增进
从资料出发,通过机器学习,最终得到某一种表现的增进
为什么要使用机器学习?
 
机器学习的三个关键:
1、有某一种效能/表现可以增进,有潜藏的模式可以学 ->目标
2、不知道怎么把规则写下来
3、要有资料
1-3机器学习在哪些领域有应用
吃:评判在这家餐厅吃会不会食物中毒(卫生状况如何)
穿:推荐顾客要怎么样搭配好看(通过衣服的销售数据,和顾客的评价)
住:通过之前的资料,预测房子的耗能状况
行:让汽车辨识交通灯,协助自动驾驶
教育:从学生答题的历史记录判断学生的程度如何,是否能答对下一题
娱乐:推荐系统——分析用户喜欢什么样的电影,并推荐。
一个可能的机器学习的模型:我们怎么样决定我们喜不喜欢一个电影?
有特征的化圈圈就很大,然后作一个内积,由得出的值判断
1-4 机器学习具体长什么样子
要喂给机器的资料:x
想要机器告诉我们的答案:y
可能可以学到的东西:f(目标函数)
资料:D={x1,y1  x2,y2 x3,y3….}
假说:g (经过机器学习得到的结果)
机器学习的演算法:A
希望g代表某一种效能的增进,也就是说,和f越接近越好
注意:f 我们是不知道的, 但是我们希望 g 和 f 很像
从看到的资料里面,从集合里,选一个最好的出来
把g可能的长相,放在集合H里面
H(模型)里面可能有好的,可能有不好的,拿出一个最好的作为g
learning model = A and H
机器学习是我们从资料出发,让机器学习演算法算出一个g,让g接近我们心里最渴望的那个f
1-5 机器学习和我们知道的一些相关领域的关系
KDDCUP 资料探勘:希望能够用资料找出一些有趣的事情
资料探勘与机器学习:非常相像,但是有一点点不一样
两个领域密不可分
机器学习与人工智能:让机器会预测
两个方式:
1、我们设计演算法,让机器自己去分析
2、我们设计演算法,让机器从资料中学到怎样工作
机器学习与统计:两个都使用资料
统计使用资料来推论一些事情
在机器学习中,g实际上就是一个推论的结果,我们想要的目标f是我们不知道的事情
统计实际上是实现机器学习的一种方法
统计学从数学出发
总结:机器学习就是从资料出发,希望找出一个函数,和目标最接近
核心:演算法,资料,函数g
——————————————————————————————————
第二章

2-1从假说的集合里面选出一个最优的g

资料从哪里来:我们想学
从所有H里选一个g出来,g和f越接近越好
H到底长什么样子?
 
模型:把每一个使用者用向量来表示
把维度综合的算起来,给使用者一个分数,超过一个标准的话,就算是通关
维度*重要性(正相关,负相关)
希望电脑自动告诉我们给信用卡是不是正确的选择
好:+1
不好:-1

h:感知器(用w算出来的分数,减去门槛值)

w:权重weight
简化:把门槛值也当成一个特殊的w
w也能表示成一个高高的向量
我们在处理x顾客的资料,有第0维

现在变成w和x的内积
h(x) = sign(w0 + w1x1 + w2x2)
线性分类器:用一条线来代表分类器
2-2 怎么样设计演算法从所有的线里面选出一条最好的线
我们唯一知道的是,我们的资料是从f产生的
先在所有线里面选一条,这条线能满足,和已知资料的匹配
选一条线,可能有错误,那么我们就开始修正错误
我们会一开始的时候,从一条线g0出发,用w0来代表一开始的线,想办法让我们的线一次比一次更好
PLA:感知器学习算法——知错能改
cycle PLA:绕圈圈的做
如果停下来了,就意味着,和已经的资料全部相吻合了。
但是也可能不会停下来。
2-3 PLA什么时候会停下来
线性可分 linear separable
假设,有一条线,为D
这条线是我们的目标
数学上这代表,每一个都大于0
PLA每次都选一个点,我们选到的错误的点也会满足这个形式。
wf和wt的关系是什么,是否接近
分析两个向量接不接近,可以作内积,内积越大,越接近
内积越来越大,就代表两个向量越来越接近
看似越来越接近,但是我们还要处理长度的问题
PLA最重要的性质:我们有错才更新
两个正规化之后向量的内积,代表越来越靠近
两个向量最大的内积为1
2-4
线性可分+每次能挑一个错=PLA会停下来
坏处:首先我们要假设PLA是线性可分的
假设:需要提前知道wf
ρ是用wf算出来的
资料里面可能存在杂讯
就算我们原来的f是一条线,我们拿到的资料也不一定会是线性可分
杂讯是比较小的
小的状况下,y和f有一定的对应程度
找一个和f很相像的g,我们看到的y和g的标签也要非常的相像
我们要找一条犯错误最小的线,当成g ->很难 NP-hard
贪心(口袋)算法:把觉得最好的先放在手上
——————————————————————————————————
第三章

3-1各式各样不同的机器学习问题

是非题
二元分类问题的应用:要不要放信用卡,是不是垃圾邮件,学生会不会答对这一题
Multiclass Classification:多元分类
应用:视觉or听觉辨识
回归分析Regression
应用:预测股市、预测天气
特点:输出是一个实数
Structured Learning结构化学习
我们要的输出空间有某一种结构在里面,希望电脑想办法去学到这些结构
3-2机器学习不一样的变性
从分辨不一样的铜板出发
监督式学习:我给你铜板,我还告诉你铜板是什么
对所有的输入都有想要的输出
非监督式学习:我不告诉你铜板具体是什么,机器自己想办法分类(分群)
密度分析
目标分散,演算法种类很多,会对应到监督式学习的演算法
Semi-supervised半监督式学习:很多照片,有一部分是已经标记好的,机器要通过已经标记好的资料分析那些没有分析的资料
另一种学习的方法:从如何训狗开始思考
用奖励or惩罚
没有实际上要什么,但是我们有一些其他的标记
类比监督机器学习:Reinforcement Learning 增强式学习
3-3 不同模型下的学习
线上学习
Reinforcement Learning也是一笔一笔的输入资料
每一轮我们都会得到一个单一的g,我们希望每一轮的g会越变越好
Batch(最常见):类似填鸭式教育
Online:像是老师在教书,循序渐进
在这两个设定里面,从机器的角度来说,都是被动的
一个新的设定:希望机器能问问题 —— active
希望机器通过有技巧的问问题,得到提高(主动学习)
应用:取得label很贵的场合(label比较稀有,难以取得)
我们怎样用不同的方式让机器学习
3-4 输入不同的时候将发生的变化
假设资料非常的具体,和我们想做的事情有一定的关系
我们相信这些资讯和我们想要的输出有一定的关系
输入:input / feature
手写数字的辨识:多类别,批次的问题
问题:喂给机器什么东西当做x?
是否对称/密度如何
Concrete Feature 非常具体的数据
每一个数字就是一个256位的向量
越抽象代表对机器来说,这个问题越困难。
要让机器把抽象的数据变成较为容易识别的特征
让机器来做:feature industy
深度学习:希望有大量的资料,去学,抽取非常具体的特征
帮每个使用者抽取特征,再用这些特征去学习
特征有一部分是人想的,有一部分是机器去学的
例如:我有使用者的id,那我能做什么事情?
比原始的数据更抽象一点,难度更大
越抽象,机器就要花更大的力气去学习,困难也会越大
我们假设有的,都是具体的方式
如果没有的话,就需要人或者是机器去想办法去抽取特征去学习(比较难,后期讲)
——————————————————————————————————
第四章

4-1 机器学习是不可能的吗?

规则是随人说的
想象:我们的输入只有两种情形,正确或者错误
在这种情况下,我给了你五笔资料,你使用某一种演算法,然后告诉我,这个g是什么样子
总共输入的情况你有2的3次方,就是8种
让机器学习演算法选一个g,在五笔我们已知的资料上,都会一模一样(PLA)
问:在这种情况下,是好还是不好?
在刚刚设计的情况,确保了g和f一模一样,但是在资料之外,就会不同
我们想要的是,在我们没有看过的资料里面,和f的吻合度到底怎么样
我们想要的是资料以外的部分
No Free Lunch 天下没有白吃的午餐
4-2 推论的可能性
我们想要知道罐子里面到底有多少弹珠(或者从罐子里拿出橘色弹珠的几率是多大)
有很大的几率:sample里面的比率会和整体的比率接近
罐子里都是橘色:μ很大
橘色很少:μ很小
霍夫丁的不等式
我今天想要v和μ一模一样,这句话大概是对的
probably approximately correct(PAC):我今天想要做这个估计,直接说罐子里面有多少橘色
风险:大概,差不多,是对的
你需要容忍多少的误差:和μ无关——你根本不需要知道μ
设一个比较大的融合度,坏事发生的几率就会看起来变小了

如果我们的样本够大的话,我们大概可以推论说μ的值和我们抽样起来的μ的值是一样的

4-3 学习的连接 
我们不知道的是 target f
如果有一个新的顾客,会不会和f是一样的
把我们罐子里的弹珠,想成x,橘色的弹珠,h和f讲得有没有一样
如果是一样的,就涂成橘色
不一样,就涂成绿色
首先,我们要有一个固定的h在手上
然后我们就可以把h专属的罐子里头的弹珠涂成橘色或者绿色
如果我们今天从这个罐子里抓了100个弹珠出来,那就意味着我们拿了100个x出来
如果我们在一个监督式学习的状态下,相对应的y在f上面衡量的情况。
你能不能知道你手上的资料是橘色的但是还是绿色的弹珠
如果你假设data是假设独立,随机的,那么这个资料就代表了一把橘色或者绿色的弹珠
所以你只要检查,h在这个资料上的表现,有几笔和资料上的不一样
我们需要将这个比率估计
我们需要抓一把够多的弹珠,独立的抽弹珠出来
我们可以大概说,h和f不一样的几率到底是多少(整个罐子里面)
从我们可以看得到的资料里面说
我们有一个几率,从罐子里面取样,首先,我们取样产生了资料
然后我们用同样的几率去衡量整个罐子里面到底一样不一样
h是从H里挑选出来的。
Ein:手上样本的错误率
Eout:样本之外的错误率
f和p我们都不需要知道
由Ein推论到Eout
如果Ein和Eout很接近,Ein很小,这时候我们就可以保证和f很接近
Verfication:不是学习,是验证,验证h的表现好不好
4-4真实学习的连接
把手上的硬币丢五次,记录,有几次正面,有几次反面
至少有一个人丢了五次全部都是正面的几率是99%
霍夫丁公式告诉我们,不好的事情几率很小
我们发现,有选择的时候,选择会恶化不好的事情
什么是不好的资料:Ein和Eout差得很远(比h来得远)
有几率变成很好的事情,也有几率变成不好的事情。
资料有无限多种可能,记录下来,判断谁是好的谁是不好的(判断依据:Ein和Eout是不是相差很远)
把所有的资料穷举出来
你有很多的h,是为了让演算法作选择
不好的资料:演算法没有办法自由自在的做选择
好的资料:演算法选什么都对,只要照着自由意识去选择就可以了
Hoeffding告诉我们的是,一行一行BAD的几率很小
Bound of BAD Date:
只要对某一个人不好,那就是不好的
如果我今天的H有无限多种选择,无论我们怎么选,都会是正确的选择
如果我的演算法Ein是最小的,Eout也很小,我有一个函数用来测试,来产生我们的资料
H要是有限的,N要够大,这样的话机器学习就是有可能做得到的
有限条的H是可以推理出来的

八爪鱼应用教程:京东商品信息采集图解

考虑到毕业设计的题目涉及到WEB数据,经过向前辈的咨询,学习了一个目前最简单也是最常用的爬虫工具——八爪鱼,以获得互联网上的数据。

虽然官方给出了视频教程,但是考虑到视频教程比较费时,反复参考起来也比较复杂,所以决定制作该图解教程。

第一步:确认要采集数据的网址。这里我选择了京东商城中的JAVA分类,可以看到一共有85页,记录下此时地址栏中的地址。QQ截图20170227134637

第二步:在左侧【我的任务栏】右键新建任务组,自定义名称,确定完成之后,右键该任务组,新建任务(高级模式),并自定义任务名,有必要的话可以在此处稍微记录一下采集数据的网址,以备日后方便查询。QQ截图20170227133839QQ截图20170227134402

第三步:点击右上方的按钮【下一步】,跳转至设计工作流程页面。选中流程框左侧第一个【打开网页】,并拖入流程框中。QQ截图20170227134919

在右侧url框中粘贴刚刚复制好的数据源网址,点击保存,软件就会在下方自动跳转到该地址。QQ截图20170227135235

第四步:首先必须知道,我们要采集的不仅仅只是我们看到的这一个页面,例如示例的这85个页面,我们都需要采集。所以我们必须先为工具设定好循环翻页这一任务。将视线转移至软件正下方,也就是刚刚打开url的页面,拖动右侧滚轮,找到位于商品底部的翻页栏,对着【下一页】按钮,右键,就会跳出对话框,选择【循环点击下一页】。这样,就是完成了为工具设定翻页操作。QQ截图20170227135928 QQ截图20170227135937

第五步:由于我们要采集的是每一个商品的信息,所以我们不能简单的获取现在这个页面上的文字信息,需要一个打开链接的过程。选择该页中的第一个商品,对准文字描述,右键,在弹出的任务框中选择【创建一个元素列表以处理一组元素】QQ截图20170227142541

此处要注意,要把层次改到【A】,点击【A】就可以了。然后点击下方的【添加到列表】,将刚刚选中的链接加入列表中。

QQ截图20170227142559

添加之后,不要着急点击完成,因为还要为之后的几十个链接加入列中,所以在这里点击【继续编辑列表】

QQ截图20170227142613

回到最底部的页面,对着该页面中最后一个商品的链接右键,还是跳出列表元素窗口。这里要注意一下,我们要统一列表的层次,所以还是把层次改到【A】。随后再点击【添加到列表】

QQ截图20170227142634

点击之后就会发现,整个页面上所有的商品链接名都被添加了进来。这时候点击【创建列表完成】,接着点击【循环】,于是八爪鱼就可以循环的打开该页面上的每一个链接了。

QQ截图20170227142647 QQ截图20170227142656

第六步:完成了上一步之后,就会自动跳转到商品链接页面,于是我们可以开始抓取数据了。点击页面上一些常用的数据,例如商品名称、商品价格等,然后选择【抓取这个元素的文本】,于是,该文本就加入了字段队列。在抓取了几项之后,我们可以修改默认的字段名,以方便我们的理解。QQ截图20170227150315 QQ截图20170227150347

如果要抓取商品图片的话,我们就要用另外一种方法。首先,我们找一下商品图片所在的层级,如下图所示,一整片蓝色区域覆盖的位置就是该图片所处于的层级,右键,在跳出的对话框中选择【抓取这个元素的OuterHtml】。在这段Html的代码中,我们可以轻易的找到商品图片的地址。

QQ截图20170227150402 QQ截图20170227150443

点击字段下方的“小齿轮”,也就是【自定义数据字段】,点击【添加】,接着选择【格式化数据】,再选择【正则表达式匹配】

QQ截图20170227150457 QQ截图20170227150509 QQ截图20170227150534

这里少截了一张图,在选择【正则表达式匹配】之后,弹出来的对话框中左下方有一行红字【……试试正则表达式工具】,点击,进入正则表达式工具,找到图片的url,然后设定开始和结束,设置完成之后,依次点击【生成】-【匹配】-【应用】

QQ截图20170227152324

如果我们需要直接下载或打开图片的话,刚刚采集到的url是无法直接打开的,所以我们这里要用到【替换】。在完成上一步之后,再点击一次【添加】,然后在任务框中选择【替换】,把“//”替换成“http://”。

QQ截图20170227152405 QQ截图20170227152426 QQ截图20170227152513

第七步:最顶部的数据采集完了,我们还需要采集一些藏在下一级页面的数据,由于京东这里的数据位置是不固定的,例如出版社这个选项,在某件商品中排第一位,在另外一个商品中就可能排在别的位置,所以不能通过固定位置来提取数据。这里还是用到刚刚抓取图片的方法,从Html代码中找到我们需要的信息。

QQ截图20170227152623 QQ截图20170227152640 QQ截图20170227153345

检查一下我们需要的字段是否齐全,检查完毕就可以点击下一步了。

QQ截图20170227153529

由于我使用的是免费版,相较正式版少了一些功能,所以在【设置执行计划】这里没有太多能更改的地方。再在下一步中选择【启动单机采集】

QQ截图20170227153637

QQ截图20170227155647

成功采集到京东页面上指定关键词的商品数据,接下来怎么用就看你的啦。

QQ截图20170227155731

软弱的人才需要鸡汤加持

是的,我的朋友圈时不时就转发鸡汤,更甚,我自己还偶尔写写鸡汤。

可能在独立份子看来,我这样的鸡汤王傻到原地爆炸,简直是朋友圈的一股泥石流。毕竟他们不需要太多的意志,要么是光凭天分就可以左右人间的高水平选手,要么是家境殷实无需自虐的享乐人间仙,再或是本身无欲无求的冷淡者……这些人在看到鸡汤的时候可能,心里的态度大抵四个字——妈的智障。

回顾我的成长史,大抵我这么爱喝鸡汤,也是和从小异地上学有关。爸妈在上海工作,我一出生就在上海,念上海的幼儿园,小学,初中。大部分人比较了解的是,被父母抛下在原籍的留守儿童的生活——黑洞洞的屋子里一双渴望学习的眼睛。但大部分人一定没了解过像我这样在父母身边一同漂泊的子女,我不苦于生活,但确确实实苦于内心。

小学的时候我是中队长,比较听话,很快就成了班主任的“得力助手”,通俗的说,就是跑腿。我送过作业,开过门,还给班主任的女儿送过牛奶、外套。映像最深的一次,班主任大概是习惯了,直接用上海话对我说,“帮我把钥匙拿来”。那时候的我只能听懂一部分上海话,对钥匙这个词非常陌生,在原地愣了很久,不知所措。过了几秒,我小心翼翼的问,“yaosi”是什么,她差不多是翻了个白眼,用普通话字正腔圆的说了一遍,钥匙。于是我带着羞辱和几分难过,悻悻的跑去办公室帮她拿来钥匙。那一年,我8岁。

之后我加大力度看上海话节目,包括那时候的红茶坊,老娘舅,开心公寓,每一集我都不落,光凭着这样,我就做到了理解无障碍的程度。但是我不想说,我不说福建方言,也不说上海话,因为我对这两个地方,都没有归属感。我从不认为和哪一边的人说一样的腔调,就能成为哪一边的人了。我只能是我自己,一个落地无根的人。

三年级的时候秋游,去东方绿洲,攀攀爬爬很有意思,我本身比较大大咧咧,胆子又大,在大部分女生都嘤嘤躲在一旁不愿攀爬的对比下,显得格外“奇葩”。路过班主任和副班主任身边,听到她们用上海话对话。“这小姑娘蛮厉害的嘛 ,这么高都敢爬的啦”“她家里是外地的呀,没玩过,大力玩才能玩回本”我没敢回头看,但是心里已经失落了一大截。她们可能以为,外地小孩都听不懂上海话吧。

爸妈从小不管我,做生意很忙,我也谅解,不吵不闹。过了小学一年级,他们就再也没看过我的作业本了。因为嫌梳辫子麻烦,妈妈让我留短发,我也没有抵抗。一年级的第二个学期,我就会背起有我三分之一个人高的书包,自己坐公交车去上学了。某天早上下雨,拥挤的车厢内氧气稀薄,我突然缺氧,快要昏厥过去,一屁股突兀的坐在人群中间,旁边的阿姨看不下去,把我拉扯到自己位子上休息。下车之后,我解开红领巾就哇哇大哭,好难受啊,真的难受。

“一个人在童年时最缺少什么,他就会在成年之后越想要得到什么”,多年之后我看到这句话,第一反应,那我应该是最缺爱吧。只要别人对我有一点好,我就恨不得十倍百倍的奉还,也就是这样才容易被渣男骗到,被同伴戏称是“渣男收割机”。如果以后我有女儿,我一定会好好爱她,让她明白,其实爱,不是那么稀有的东西,你回过头,妈妈就能给你。

大概我10岁的时候,家里境况好起来了,全款在上海买了套商品房。再之后的十几年里,买了店铺,买了车子,买了别墅……可我依旧自卑。我有个哥哥,所以我知道这些都不是我的——福建人受传统观念影响,财产传男不传女。哥哥他大专毕业之后工作一年嫌累便不愿工作,回家啃老。但是我不能,我知道,如果自己不努力,不仅可能要被强迫去嫁给自己不喜欢的人,还可能一无所有。所以我总是像打了鸡血一样,在各种活动里披荆斩棘,不甘人后,计较输赢,分数不如我所想我就会自责和难过很久。我在别人看来很折腾的模式下度过一天又一天,从每一个小小的成就感中找到自我价值的证明。

所以回到主题,到底什么样的人需要常常给自己灌鸡汤呢?没错,就是我这样软弱的人啊。当一个人的能力无法满足他的欲望,戾气就会不请自来。于是,他们只能不断的在“打鸡血——失败——懊悔——打鸡血”这样的循环中,庸庸碌碌度过一生了。鸡汤的作用,就是一巴掌给你打醒,底子不如人,家境不如人,智商不如人,还想过得更好?不好意思,除了做梦,你只能乖乖努力了。接着转发,评论上两句认同的话,再关掉手机,干正事儿去。恭喜,原文作者得到了一次不错的推广。

是的,这样的人看起来傻毙了,我也经常回过头来嘲笑自己,然后一条条的删动态。然而,每一个过去的我,每一个卯足了劲儿傻逼极了的我,都是让我坚持走到现在的,珍贵的回忆。今后的我,恐怕还是要像个智障一样,边喝鸡汤边去奋斗了。撞墙很可怕,但是没头破血流过,我怎么知道,这里不能撞呢。

最后还是写了一篇没有重点的流水账,也罢,开心就好。

《自控力》:知道自己为何失控,才能自控

大概是在三月份的时候,加入了熊猫书院计划。计划内容为,十个月,通过卡片式阅读,看书,一个月4本,7月份正式开始。第一本书就是今天的主角——《自控力》。其实说起来,这个计划本身意义不大,因为写卡片的人事带着自己的理解,难免会有偏差,但是可以起到一个大致的引导。比如,读《自控力》卡片的时候,我就隐约觉得这本书不错,所以决心去看整本。但是第三本书,《精进》,光看卡片,给我的感觉就是无脑成功学励志鸡汤书,于是我就不会选择去看这本书。而且这本书,还是目前唯一一本,熊猫书院计划策划方发了通知,表示和出版社沟通,说是自身不盈利,卖实体书给学员……抱歉,这样的俗鸡汤我没有很想收藏。

我把《自控力》作为睡前读物和偶尔出门时地铁上的时间消遣,花了两个星期慢慢悠悠的看完了,自我感觉比看卡片时受益提高了许多。卡片是把精华归纳,告诉你,科学研究表明的结论是如何,但是却没有告诉你这个结论具体是怎么来的,所以作为一个卡片的读者,你所能理解的这本书内容就是,哦,好,我知道了,但是我可能不一定会这么做。回到书本,其实这是一本论述方法很有趣的书,一开始,作者要读者想象自己身处大草原,被剑齿虎穷追不舍,由此进入到探索内心真实感受的旅程,这一路上,有抗拒甜甜圈的节食者,有渴望戒烟的烟民,还有自控力胜于大学生的黑猩猩和渴望被电击的小白鼠……一个接一个的自控力实验,会让你反思,自己平时某一些做法,很大程度上其实也是因为文中类似的原因。情不自禁我也开始留意起商家为了促进消费者多巴胺的小把戏,借此成功控制了自己的购买欲(时常我会忍不住为了赠品买一点没用的东西回家)。我会在焦躁的时候开始学着做深呼吸或者冥想,面对诱惑,我也渐渐明白了,放远一点,再等十分钟。

我一直深知自己不是一个拥有强自控力的人,爱哭爱笑,喜怒溢于言表,更糟糕的是,偶尔会忍不住对身边亲近的人发脾气。我会在减肥期间,给自己阶段性奖励,结果又开始暴饮暴食。认真工作的时候,总是忍不住看手机的消息。也是深知自己的缺点,才更想通过做些什么来改变现状。虽说极度自控会带来反效果,自控力也会消耗,那么就全力把自控的精神,带去效率最高的地方吧www