黄甫的前言
写下这篇小简书之前,我其实挺后悔从大一开始没有养成“留痕”的习惯,很多好的算法代码没有及时整理像Gitub、CSDN这样的资源网站上。也不是说能造福后来人,起码日后自己回顾时,不用再google某个算法或是小概念。
这并不是我的第一篇小简书,初次使用简书的时候是发一些自己写的随笔、手绘之类的。这也不是我第一次学习ML领域,在写下这篇文章之前,我有幸在某个假期进行了ML领域的科研还拥有了第一篇小论文~~虽然是水文吧但是真的获取了一定的科研能力,而且ML的模样对我而言也更加清晰了。不过进行那次科研之前并没有系统学习过ML的知识,完全是一边work一边study,每天晚上都怀疑自己是不是马上要“猝死”了O(∩_∩)O哈哈
这是对吴恩达先森机器学习课程的学习笔记,希望我能将这一系列的笔记坚持到底吧!
接下来进入正题~
注: 文中图片若未说明,均出自吴恩达机器学习中的视频
History of ML
- 1959 Arthur Samuel (checkers playing program,跳棋游戏)—— Field of study that gives computers the ability to learn without being explicitly programmed. [没想到ML的雏形也是从棋类游戏开始的,Samuel本不是跳棋高手,但是培养了一个“高手”]
- 1998 Tom Mitchell ——(此处不再赘述英文原话啦~)定义如下参数:task
,performance measure
,experience
;对应到棋类游戏,
是和player的对弈,
是胜率,
是如何赢棋
Classification of ML
1. 监督学习
1.1 引例1:房价预测
售价——平方米数据,即已知不同平方米的房子对应的不同售价,预测未知平方米下的房子能售价多少。属于回归Regression问题,最终预测得到的值为连续值(线性预测:用一条直线穿过点或点的周围/多项式预测:曲线穿过点或点的周围)
![](https://img.haomeiwen.com/i13975801/68e25db9278e4646.png)
1.2 引例2:乳腺癌预测
1.2.1 一维特征:肿瘤大小——是否恶性数据,已知不同大小的肿瘤对应的症状是良性还是恶性,预测未知大小肿瘤对应的症状。属于分类Classiication问题,最终预测的值为离散:判断结果是0(良性)还是1(恶性);实际情况也可能是多分类问题,eg: 分类结果为0(良性),1(癌症类型一),2(癌症类型二),3(癌症类型三)
![](https://img.haomeiwen.com/i13975801/6e52c31cc9fd0726.png)
1.2.2 二维特征:是否恶性——年龄+肿瘤大小数据集,预测在某年龄下肿瘤一定大小的人的症状,预测结果可能是一条“分割线”,落在分割线某部分的属于良性,落在另一部分的属于恶性
![](https://img.haomeiwen.com/i13975801/80de29fa5b9f24b3.jpg)
1.2.3 多维特征:是否恶性——年龄+肿瘤大小+肿瘤厚度+……
1.3 定义:给算法一个包含正确答案的数据集(对房价预测问题,此处的right answers指售价-平方米数据集),让算法可以预测更多的正确答案
问题来了:如果处理的问题中有无数多特征该怎么办!?
支持向量机(SVM)有巧妙的方法
2. 无监督学习
上面的监督学习中,对每一个/组特征都有明确的结果(是不是恶性),即画出一组坐标。
对于无监督学习,往往不知道数据的标签label是什么,只知道有这么一个数据点,希望能找到内在的结构/联系。即我不知道数据类型,不知道有哪些类型,不知道最后能分成哪些类。
以我自己做过的一个实验为例:比如在一个暗室中采集各点的亮度值(亮度值——x坐标+y坐标),通过分析和一定的算法就能知道光源在哪个位置上,正是通过不同的簇(cluster)
![](https://img.haomeiwen.com/i13975801/ccbcea2edac6d335.jpg)
2.1 聚类算法
- 应用:谷歌新闻——每天收集上万新闻,组成不同的新闻专题展示给user
基因分析:不同个体在某个基因上的表现程度,比如将表现程度用不同颜色标记,通过颜色自动归类
人际网络:通过在票圈的表现判断那些人同属一个交际圈互相认识
市场分割:将客户分到不同市场
鸡尾酒会问题
鸡尾酒会问题:说话人多声音嘈杂,很难听清面前的人说话;假设屋子里只有两个人甲、乙在说话,有两个麦克风1、2记录他们的说话内容。麦克风1离甲近一些,麦克风2离乙近一些,两个麦克风记录的内容会不太一样。通过算法将麦克风中的声音分离。
关键代码如下,我用matlab跑了一下,有点问题尚未解决
[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
网友评论