many chore
This commit is contained in:
FallenYing
2023-07-28 23:20:46 +08:00
parent 50c8ebb126
commit 38a91c62e7
13 changed files with 365 additions and 361 deletions

View File

@@ -1,6 +1,6 @@
# 机器学习AI快速入门quick start
本章内容需要你掌握一定的 python 基础知识。
::: warning 😇 本章内容需要你掌握一定的 python 基础知识。
如果你想要快速了解机器学习,并且动手尝试去实践他,你可以先阅览本部分内容。
@@ -11,8 +11,9 @@
当然我需要承认一点,为了让大家都可以看懂,我做了很多抽象,具有了很多例子,某些内容不太准确,这是必然的,最为准确的往往是课本上精确到少一个字都不行的概念,这是难以理解的。
本篇内容只适合新手理解使用,所以不免会损失一些精度。
:::
# 什么是机器学习
## 什么是机器学习
这个概念其实不需要那么多杂七杂八的概念去解释。
@@ -22,17 +23,17 @@
然后你给了他更多信息,比如说国家给出了某些条例,他分析这个条例一出,房价就会降低,他给你了个新的数据。
因此我们得出一个结论:机器学习 泛型算法。
因此我们得出一个结论机器学习 泛型算法。
甚至深度学习,也只是机器学习的一部分,不过使用了更多技巧和方法,增大了计算能力罢了。
![](https://cdn.xyxsw.site/boxcnbtaUStj8coQiNTmZzfWqNl.png)
# 两种机器学习算法
## 两种机器学习算法
你可以把机器学习算法分为两大类监督式学习supervised Learning和非监督式学习unsupervised Learning。要区分两者很简单但也非常重要。
## 监督式学习
### 监督式学习
你是卖方的,你公司很大,因此你雇了一批新员工来帮忙。
@@ -50,7 +51,7 @@
这就是监督学习,你有一个参照物可以帮你决策。
## 无监督学习
### 无监督学习
没有答案怎么办?
@@ -78,29 +79,27 @@
但是「机器在少量样本数据的基础上找出一个公式来解决特定的问题」不是个好名字。所以最后我们用「机器学习」取而代之。而深度学习,则是机器在数据的基础上通过很深的网络(很多的公式)找一个及解决方案来解决问题。
# 看看 Code
## 看看 Code
如果你完全不懂机器学习知识,你可能会用一堆 if else 条件判断语句来判断比如说房价
```python
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0 # In my area, the average house costs $200 per sqft
price_per_sqft = 200
if neighborhood == "hipsterton":
price = 0 # In my area, the average house costs $200 per sqft
price_per_sqft = 200 i f neighborhood == "hipsterton":
# but some areas cost a bit more
price_per_sqft = 400
elif neighborhood == "skid row":
price_per_sqft = 400 elif neighborhood == "skid row":
# and some areas cost less
price_per_sqft = 100 # start with a base price estimate based on how big the place is
price = price_per_sqft * sqft # now adjust our estimate based on the number of bedrooms
if num_of_bedrooms == 0:
# Studio apartments are cheap
price = price - 20000
else:
price_per_sqft = 100 # start with a base price estimate based on how big the place is
price = price_per_sqft * sqft # now adjust our estimate based on the number of bedrooms
if num_of_bedrooms == 0:
# Studio apartments are cheap
price = price20000
else:
# places with more bedrooms are usually
# more valuable
price = price + (num_of_bedrooms * 1000)
return price
price = price + (num_of_bedrooms * 1000)
return price
```
假如你像这样瞎忙几个小时,最后也许会得到一些像模像样的东西。但是永远感觉差点东西。
@@ -119,7 +118,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
如果你可以找到这么一个公式:
Y(房价)=W(参数*X1卧室数量+W*X2面积+W*X3地段
Y(房价)=W(参数) \* X1(卧室数量) + W \*X2(面积) + W \* X3(地段)
你是不是会舒服很多,可以把他想象成,你要做菜,然后那些参数就是佐料的配比
@@ -151,7 +150,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
第三步:
通过尝试所有可能的权重值组合,不断重复第二步。哪一个权重组合的代价最接近于 0你就使用哪个。当你找到了合适的权重值你就解决了问题!
通过尝试所有可能的权重值组合,不断重复第二步。哪一个权重组合的代价最接近于 0你就使用哪个。当你找到了合适的权重值你就解决了问题
兴奋的时刻到了!
@@ -176,7 +175,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
![](https://cdn.xyxsw.site/boxcnXbd7bqnqPwF8f1Up8rHq5e.png)
<em>θ 表示当前的权重值。 J(θ) 表示「当前权重的代价」。</em>
<em>θ 表示当前的权重值。J(θ) 表示「当前权重的代价」。</em>
这个等式表示,在当前权重值下,我们估价程序的偏离程度。
@@ -210,7 +209,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
换言之,尽管基本概念非常简单,要通过机器学习得到有用的结果还是需要一些技巧和经验的。但是,这是每个开发者都能学会的技巧。
# 更为智能的预测
## 更为智能的预测
我们通过上一次的函数假设已经得到了一些值。
@@ -229,7 +228,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
<em>箭头头表示了函数中的权重。</em>
然而,这个算法仅仅能用于处理一些简单的问题,就是那些输入和输出有着线性关系的问题。但如果真实价格和决定因素的关系并不是如此简单,那我们该怎么办? 比如说,地段对于大户型和小户型的房屋有很大影响,然而对中等户型的房屋并没有太大影响。那我们该怎么在我们的模型中收集这种复杂的信息呢?
然而,这个算法仅仅能用于处理一些简单的问题,就是那些输入和输出有着线性关系的问题。但如果真实价格和决定因素的关系并不是如此简单,那我们该怎么办?比如说,地段对于大户型和小户型的房屋有很大影响,然而对中等户型的房屋并没有太大影响。那我们该怎么在我们的模型中收集这种复杂的信息呢?
所以为了更加的智能化,我们可以利用不同的权重来多次运行这个算法,收集各种不同情况下的估价。
@@ -241,7 +240,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
这样我们相当于得到了更为准确的答案
# 神经网络是什么
## 神经网络是什么
![](https://cdn.xyxsw.site/boxcnhLjMMdts91f8gcpgSVE8Ed.png)
@@ -272,7 +271,7 @@ class LinearModel(torch.nn.Module):
y_pred=self.linear(x)
return y_pred
'''
线性模型所必须的前馈传播即wx+b
线性模型所必须的前馈传播,即 wx+b
'''
model=LinearModel()
@@ -299,21 +298,23 @@ y_test=model(x_test)
print('y_pred=',y_test.data)
```
# 由浅入深(不会涉及代码)
## 由浅入深(不会涉及代码)
# 为什么不教我写代码?
::: warning 😇 为什么不教我写代码?
因为你可能看这些基础知识感觉很轻松毫无压力,但是倘若附上很多代码,会一瞬间拉高这里的难度,虽然仅仅只是调包。
但是我还是会在上面贴上一点代码,但不会有很详细的讲解,因为很多都是调包,没什么好说的,如果你完全零基础,忽略这部分内容即可
:::
我们尝试做一个神奇的工作,那就是用神经网络来识别一下手写数字,听上去非常不可思议,但是我要提前说的一点是,图像也不过是数据的组合,每一张图片有不同程度的像素值,如果我们把每一个像素值都当成神经网络的输入值,然后经过一个黑盒,让他识别出一个他认为可能的数字,然后进行纠正即可。
机器学习只有在你拥有数据最好是大量数据的情况下才能有效。所以我们需要有大量的手写「8」来开始我们的尝试。幸运的是恰好有研究人员建立了 [MNIST 手写数字数据库](https://link.zhihu.com/?target=http%3A//yann.lecun.com/exdb/mnist/)它能助我们一臂之力。MNIST 提供了 60,000 张手写数字的图片,每张图片分辨率为 18×18。即有这么多的数据。
```python
(X_train, y_train), (X_test, y_test) = mnist.load_data()
#这段是导入minist的方法但是你看不到如果你想看到的话需要其他操作
#这段是导入 minist 的方法,但是你看不到,如果你想看到的话需要其他操作
```
我们试着只识别一个数字 8
@@ -345,7 +346,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
现在唯一要做的就是用各种「8」和非「8」的图片来训练我们的神经网络了。当我们喂给神经网络一个「8」的时候我们会告诉它是「8」的概率是 100% 而不是「8」的概率是 0%,反之亦然。
# 仅此而已吗
## 仅此而已吗
当数字并不是正好在图片中央的时候,我们的识别器就完全不工作了。一点点的位移我们的识别器就掀桌子不干了
@@ -355,7 +356,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
在真实世界中这种识别器好像并没什么卵用。真实世界的问题永远不会如此轻松简单。所以我们需要知道当「8」不在图片正中时怎么才能让我们的神经网络识别它。
## 暴力方法:更多的数据和更深的网络
### 暴力方法:更多的数据和更深的网络
他不能识别靠左靠右的数据?我们都给他!给他任何位置的图片!
@@ -371,7 +372,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
一层一层堆叠起来,这种方法很早就出现了。
## 更好的方法?
### 更好的方法?
你可以通过卷积神经网络进行进一步的处理
@@ -389,7 +390,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
![](https://cdn.xyxsw.site/boxcnsm0cJGKqt0AU8Kv3K3rkKg.png)
## 卷积是如何工作的
### 卷积是如何工作的
之前我们提到过,我们可以把一整张图片当做一串数字输入到神经网络里面。不同的是,这次我们会利用<strong>平移不变性</strong>的概念来把这件事做得更智能。
@@ -405,7 +406,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
换一句话来说,我们从一整张图片开始,最后得到一个稍小一点的数组,里面存储着我们图片中的哪一部分有异常。
## 池化层
### 池化层
图像可能特别大。比如说 1024*1024 再来个颜色 RGB
@@ -429,7 +430,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
我们也要感谢显卡,这项技术早就出现了但是一直算不了,有了显卡让这件事成为了可能。
## 作出预测
### 作出预测
到现在为止,我们已经把一个很大的图片缩减到了一个相对较小的数组。
@@ -445,10 +446,10 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
比如说,第一个卷积的步骤可能就是尝试去识别尖锐的东西,而第二个卷积步骤则是通过找到的尖锐物体来找鸟类的喙,最后一步是通过鸟喙来识别整只鸟,以此类推。
# 结语
## 结语
这篇文章仅仅只是粗略的讲述了一些机器学习的一些基本操作,如果你要更深一步学习的话你可能还需要更多的探索。
# 参考资料
## 参考资料
[machine-learning-for-software-engineers/README-zh-CN.md at master · ZuzooVn/machine-learning-for-sof](https://github.com/ZuzooVn/machine-learning-for-software-engineers/blob/master/README-zh-CN.md#%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E6%A6%82%E8%AE%BA)