机器学习 P1之六行完成一个机器学习程序(笔记)

机器学习入门:苹果与橘子分类
本文介绍机器学习的基本概念,通过一个简单的苹果与橘子分类问题,展示如何使用决策树算法进行监督学习。文章讲解了特征选择、训练数据的重要性,并演示了使用Python的scikit-learn库实现分类器的过程。

机器学习p1

image

机器学习是人工智能的一个子集
早期的人工智能都擅长于某一点

例如:深蓝计算机可以下国际象棋到达冠军水平 但它也只能做这个

现在 我们希望编写一个程序 就能解决很多问题 而不用重写

AlphaGo就是一个很好的例子 它击败了世界围棋冠军

但重要的是 相同的程序 它还能学习雅达利的游戏 雅达利(Atari)

机器学习让这成为可能 它是一种学习的算法 可以从例子和经验中学习(就是监督学习supervised learning)

今天讲的是一个很简单的例子

我会给你们一个简单的问题 但是不使用机器学习就解决不了的问题

你能用代码来区分哪个是苹果 哪个是橘子吗?

假设我们要编写一个程序 可以接收一张图片作为输入

经过分析后 输出水果的类型

你要怎么解决这一问题?

你打算手动编写一堆规则开始吗?

比如你可能会写 数出橙色的像素点的个数 绿色的像素点的个数

对比的结果应该可以帮你认出水果类型

对于简单的图像 这是很好使的

但是深入一些的问题这个结果就会一团糟

现实世界是很复杂的 你编写的代码会不断出现问题

比如苹果和橘子的黑白照你又打算怎么处理呢?

所以无论你写出了怎样的代码 我都可以找到一张图片让其失效

难道你要写无数条代码 而只是用来区分苹果和橘子吗?

如果给你一个新问题 那你不得吐血?

所以我们需要一个更好的方法 一种更好的算法

假如这个算法可以帮我们自己制定规则 那我们就不用自己编写规则了

所以我们要训练一个叫做分类器(classifier) 的算法

你可以把分类器当成一个函数 它接受数据 然后贴标签输出

比如我们希望给一张苹果图片它可以识别出苹果

一封邮件它可以识别是不是垃圾邮件

自动编写分类器的技术我们叫做 “监督学习(supervised learning)

我们需要两个开源库 “scikit-learn"和"TensorFlow”

我们马上就能看到scikit的实际运行效果

我们需要下载“scikit-learn” 
先Anaconda是比较快的 方便的方式

Anaconda(Windows下载链接、其他系统也在里面选择即可)

image

我们要完成一个函数
然后遵循几个步骤得到结果

graph LR
收集训练数据-->得到特征
得到特征-->|计算推断|判断类型

训练数据是指我们要解决问题对象的特征、数据

这里接着橘子和苹果的问题

我们选择了重量(weigtht)纹理(texture) 对应 标签(label)

image

bumpy 疙瘩不平的 ; smooth 平顺光滑的

好的特征可以使区分水果的品种变得简单

训练数据越多 能创建的分类器就越好

image

我们用0表示bumpy 用1表示smooth

label里面的0代表苹果 1代表橘子

接下来我们要用到一个分类器叫做“决策树
image
可以理解为一堆规则的组合 在面对n个问题时进行n个决策

我们要引进这个决策树需要以下代码

from sklearn import tree
feature = [[140,1],[130,1],[150,0],[170,0]]
labels = [0,0,1,1]
clf = tree.DecisionTreeClassifier()

我们还输入了特征值和对应的标签

现在的决策树还是一个没有规则的空盒子

现在我们需要一种学习算法来让他“形成”规则

规则比如说 它发现橘子的weight一般更大

那么它会认为重一点的是橘子的可能性更大 这是规则

在scikit中 包含在分类器对象中的 训练算法叫做 fit

可以理解fit就是“在数据中找到规律”

于是就有第五行代码

from sklearn import tree
feature = [[140,1],[130,1],[150,0],[170,0]]
labels = [0,0,1,1]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(features,labels)
第四行应该是定义clf为树里面的决策树
第五行则是使用决策树里面的fit学习算法来学习处理features和labels
from sklearn import tree
feature = [[140,1],[130,1],[150,0],[170,0]]
labels = [0,0,1,1]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(features,labels)
print (clf.predict([[150,0]]))

我们要测试一个[150,0]的数据 150g并且bumpy的feature

相信我们也能判断出 它会返回[1] (橘子)image

下载了anaconda和scikit-learn库并且执行的结果

好了 六行代码完成一个机器学习程序! 听起来很不错!

后面多回顾就能更加理解原理。

视频来源:https://www.bilibili.com/video/av7200723

### 李宏毅机器学习课程及相关资料 李宏毅教授的机器学习课程是一套全面而深入的教学资源,涵盖了从基础到高级的各种主题。以下是关于该课程及其相关资料的一些详细介绍: #### 1. **课程概述** 李宏毅2020机器学习课程提供了丰富的教学内容,包括但不限于监督学习、半监督学习、无监督学习、迁移学习以及强化学习等多个领域的内容[^1]。这些课程通过理论讲解与实际案例相结合的方式,帮助学生理解并掌握各种机器学习技术的应用场景。 #### 2. **具体章节内容** - **视频P1-P16**: 这部分主要介绍了机器学习的基础概念和方法论,适合初学者快速了解整个学科框架。 - **视频P17-P23**: 深入探讨了一些更复杂的算法和技术细节,例如如何构建高效的预测模型等。 #### 3. **文字版笔记推荐** 对于偏好阅读而非观看视频的学习者来说,可以参考资源4中的GitHub学习笔记。这份文档整理了每节视频的核心要点,并辅以图表说明,便于理解和复习。 #### 4. **其他重要知识点** - **机器学习的主要类型**: - 监督学习:用于解决诸如回归分析(如PM2.5浓度预测)或者分类问题(比如判断一封电子邮件是否属于垃圾邮件类别)。还有涉及复杂模式识别的任务,像图像处理中的目标检测等等[^2]。 - 半/无监督学习:当标签信息不足甚至完全没有时采用的方法。 - 迁移学习与强化学习则是另外两个重要的分支方向,在特定条件下展现出卓越性能。 - **终身学习挑战**: 终身学习面临两大核心难题——既要防止因新任务训练而导致旧有技能丧失即知识保留(knowledge retention),又要保持灵活性避免过度僵硬(not intransigence)[^3]。此外还需要考虑有效的实现方式来平衡计算成本同效果之间的关系。 - **多任务联合优化策略**: 当面对多个关联紧密的不同子问题共同求解情况之下,则需探索合理途径使得各单项之间相互促进而不是互相干扰[ ^3 ]. #### 示例代码片段展示 下面给出一段简单的Python程序用来演示基本线性回归操作过程作为例子之一: ```python import numpy as np from sklearn.linear_model import LinearRegression # Sample data generation X = np.array([[1], [2], [3]]) y = np.array([2, 4, 6]) # Model initialization and fitting model = LinearRegression() model.fit(X, y) print(f"Coefficients: {model.coef_}") print(f"Intercept: {model.intercept_}") ``` 此脚本利用Scikit-Learn库实现了最简形式的一维直线拟合功能,展示了最基本的建模思路。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值