01-01 機器學習


機器學習

  可能有很多同學想到高大上的人工智能、機器學習和深度學習,會在懷疑我是否能學會。在自我懷疑之前,我希望你能考慮一個問題,你了解機動車的構造原理嗎?難道你不了解機動車的構造就不能開車了嗎?我們的機器學習也是如此,你只要拿到一張“駕駛證”,你就能很好的應用它,並且能通過本文的學習,快速的為公司、為企業直接創造價值。

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101101036-295696689.png)

  機器學習已經不知不覺的走入了我們的生活,我們可能無法干涉它的崛起,也可能無法創建如十大算法一樣的算法。但現如今生活的方方面面都有着機器學習的身影,為什么我們不試着去認識它呢,讓我們能在機器學習徹底降臨之前做好駕馭它的准備呢?

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101127995-2137979752.jpg)

1.1 學習目標

  1. 了解人工智能、機器學習和深度學習之間的區別
  2. 掌握機器學習中的監督學習和無監督學習問題

1.2 人工智能

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101146872-2008788516.png)

人工智能(artificial intelligence, AI):通過機器來模擬人類認知的技術。

  人工智能被新聞媒體吹捧的讓人遙不可及,但是細心的你可能會發現人工智能其實已經走入了我們的生活,並且已經步入以下幾個領域。

  1. 人臉識別應用中,他根據輸入的照片,判斷照片中的人是誰
  2. 醫療診斷中,他根據輸入的醫療影像,判斷疾病的成因
  3. 語音識別中,他根據人說話的音頻信號,判斷說話的內容
  4. 電子商務網站中,他根據用戶曾經的購買記錄,預測用戶感興趣的商品,網站進而達到推薦商品的目的
  5. 自動駕駛應用中,他根據對當前汽車所處情況的分析,判斷汽車接下來的速度和方向
  6. 金融應用中,他根據股票曾經的價格和其他交易信息,預測股票未來的價格走勢
  7. 圍棋對弈中,他根據當前的盤面形式,預測在哪個地方落子勝率最大(2016年3月的alphago大戰李世石)
  8. 基因測序應用中,他根據對人的基因序列的分析,預測這個人未來患病的可能性
  9. 智能家居、智能玩具、網絡安全……

  最后,引用《終極算法》中的一段話:"我們可能無法阻擋人工智能發展的趨勢,但是我們可以學會和他做朋友。"

1.3 機器學習

機器學習(machine learning):通過學習獲得進行預測或判斷的能力的人工智能。

  機器學習是人工智能實現的一種方法(算法)。他主要是從已知數據中去學習數據中蘊含的規律或者判斷規則,也可以理解成把無序的信息變得有序,然后他通過把這種規律應用到未來的新數據上,並對新數據做出判斷或預測。

  例如某個機器學習算法從全球70億人類的數據集中學得了某種判斷規則,這個判斷規則可以通過輸入Egon老師的身高180cm、體重70Kg,判斷他是個帥哥。

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101254246-2090302260.jpg)
## 1.3.1 機器學習基本術語
# 機器學習基本術語圖例
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 顯示plt.show()的圖片,如若不使用jupyter,請注釋
%matplotlib inline
# 中文字體設置,找到與之對應的中文字體路徑
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')

# 樣本
plt.text(1, 70, s='{身高(180),體重(70),年齡(19),五官(精致)',
         fontproperties=font, fontsize=13, color='g')
plt.annotate(text='樣本', xytext=(90, 70), xy=(78, 71), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')
plt.annotate(text='特征', xytext=(30, 90), xy=(10, 73), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')
plt.annotate(text='', xytext=(30, 90), xy=(30, 73), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')
plt.annotate(text='', xytext=(30, 90), xy=(50, 73), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')
plt.annotate(text='', xytext=(30, 90), xy=(70, 73), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')

plt.hlines(67, 0, 100, linestyle='--', color='gray')

# 特征
plt.text(1, 40, s='{身高(180),體重(70),年齡(19),五官(精致),帥}',
         fontproperties=font, fontsize=10, color='g')
plt.annotate(text='樣例(實例)', xytext=(90, 40), xy=(70, 41), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')
plt.annotate(text='特征', xytext=(30, 60), xy=(8, 43), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')
plt.annotate(text='', xytext=(30, 60), xy=(23, 43), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')
plt.annotate(text='', xytext=(30, 60), xy=(38, 43), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')
plt.annotate(text='', xytext=(30, 60), xy=(53, 43), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')
plt.annotate(text='標記', xytext=(67, 60), xy=(67, 43), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')

plt.hlines(37, 0, 100, linestyle='--', color='gray')

# 特征空間
plt.text(1, 30, s='$\{(x_1^{(1)},x_1^{(2)},\cdots,x_1^{(n)}),(x_2^{(1)},x_2^{(2)},\cdots,x_2^{(n)}),\cdots,(x_m^{(1)},x_m^{(2)},\cdots,x_m^{(n)})\}$',
         fontproperties=font, fontsize=10, color='g')
plt.annotate(text='特征空間($m$個樣本)', xytext=(90, 15), xy=(92, 30), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')
plt.annotate(text='特征向量($n$維特征)', xytext=(15, 15), xy=(15, 28), ha='center', arrowprops=dict(
    arrowstyle="<-", color='b'), fontproperties=font, fontsize=15, color='r')

plt.xlim(0, 100)
plt.ylim(10, 100)
plt.title('機器學習基本術語圖例', fontproperties=font, fontsize=20)
plt.show()
![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101944864-2018429826.png)

  通過上圖,我們可以習得以下機器學習的基本術語:

  • 特征(feature):描述一件事物的特性,如一個人的身高、體重、年齡和五官。
  • 樣本(sample):由一個人的特征組成的數據,如\(\{180,70,19,精致\}\)
  • 標記(label):描述一件事物的特性,如一個人帥或丑、一個人的財富數量。注:特征和標記沒有明確的划分,由於問題的不同可能導致A問題的特征是B問題的標記,B問題的標記是A問題的特征。
  • 樣例(example):由一個人的特征和標記組成的數據,如\(\{180,70,19,精致,帥\}\)
  • 特征空間(feature space):由\(\{x^{(1)},x^{(2)},\cdots,x^{(n)}\}\)這n個特征張成的n維空間,如以身高張成的一維空間(線);以身高和體重張成的二維空間(面);以身高、體重和年齡張成的三維空間(體)。
  • 特征向量(feature vector):特征空間內的某一個具體的向量,即特種空間中的某一個具體的點,

\[\{x_i^{(1)},x_i^{(2)},\cdots,x_i^{(n)}\},\,i\in{R} \]

其中\(x_m^{(n)}\)表示第m個人的第n個特征。如身高、體重、年齡張成的三維空間中的某一個具體的點\((180,70,19)\)

1.4 深度學習

深度學習(deep learning):通過組合低層屬性特征形成更加抽象的高層屬性特征。如學英語的時候,“Egon handsome”這12個英文單詞是低層屬性特征,而“Egon handsome”的語義則是抽象的高層屬性特征。

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101334779-809731912.png)

  深度學習的概念源於人工神經網絡的研究,它屬於機器學習中的某一個方法,其中深度學習中的“深度”是指神經網絡的層數。

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011102023060-204243331.jpg)

1.5 機器學習分類

  機器學習依據數據集數據格式的不同,可以划分成監督學習和無監督學習;依據算法模式的不同可以划分為監督學習、無監督學習、半監督學習和強化學習。

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011102050935-738857309.jpg)

1.5.1 監督學習

監督學習(supervised learning):通過輸入一組已知標記的樣本,輸出一個模型(model),然后通過這個模型預測未來新數據的預測值或預測類別。

  監督學習的流程:

  1. 輸入:一組已知類別的樣本
  2. 輸出:一個模型
  3. 預測未來新數據的預測值或預測類別

  由於數據標記的類型不同,監督學習問題又分為回歸問題和分類問題:

  • 如果模型的輸出為連續值,如股票價格\(2.2,2.4,2.6,3…\)類型的數據稱為連續值,則該監督學習問題稱作回歸問題
  • 如果模型的輸出為離散值,如\(阿貓,阿狗,…\)\(\{0,1\}\)(輸出不是\(0\)就是\(1\)),則該監督學習問題稱作分類問題。

1.5.1.2 回歸問題

序號 房子面積(m\(^2\)) 房價(元)
1 10 100
2 20 200
3 40 400
4 100 1000
5 200 2000
# 回歸問題圖例
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')

x = np.linspace(0, 200, 10)
y = 10*x

plt.plot(x, y)
plt.xlabel('房子面積', fontproperties=font, fontsize=15)
plt.ylabel('房價', fontproperties=font, fontsize=15)
plt.title('回歸問題圖例', fontproperties=font, fontsize=20)
plt.show()
![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011102143254-1955059282.png)

  通過上表給出的數據集(一組已知標記的樣本)舉例,通過數據集中的數據,我們可以假設房子面積和房價之間存在某種關系(模型)為

\[房價=10*房子面積 \]

  假設你在得到房子面積和房價之間的關系后,得到了上海二環某一所房子\(H_1\)的面積為\(1000m^2\)的消息(未來新數據),這個時候你就可以通過\(H_1\)的房子面積和房價之間的關系得到這所房子的價格為

\[H_1的房價=10*H_1的房子面積=10*1000=10000(元)\quad\text{預測值} \]

在這個回歸問題中:

  1. 房子面積稱為特征(feature)
  2. 房價稱為標記(label)
![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101405093-1341391146.jpg)

1.5.1.3 分類問題

序號 房子面積(m\(^2\)) 房子所在區域
1 10 A區
2 20 A區
3 40 A區
4 100 B區
5 200 B區
# 分類問題圖例
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')

a_area = [10, 20, 40]
a_y = [0, 0, 0]

b_area = [100, 200]
b_y = [0, 0]

plt.scatter(a_area, a_y, label='A', color='r')
plt.scatter(b_area, b_y, label='B', color='g')
plt.vlines(50, ymin=-0.015, ymax=0.015, color='gray', linestyles='--')
plt.xlabel('房子面積', fontproperties=font, fontsize=15)
plt.title('分類問題圖例', fontproperties=font, fontsize=20)
plt.legend()
plt.show()
![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011102204152-1615779206.png)

  同樣通過上表給出的數據集舉例,通過數據集的數據,我們可以假設房子面積和房子所在區域存在某種關系為

\[房子所在區域 = \begin{cases} P(A區|房子面積<50m^2) \\ P(B區|房子面積>50m^2) \end{cases} \]

  其中\(P(A區|房子面積<50m^2)\)為條件概率,即當滿足\(房子面積<50m^2\)條件時房子所在區域為\(A區\)的概率;\(P(B區|房子面積>50m^2)\)也為條件概率,當滿足\(房子面積>50m^2\)條件時房子所在區域為\(B\)區的概率。

  假設你在得到房子面積和房子所在區域的關系后,得到了上海二環內兩所房子\(H_1\)\(H_2\)面積分別為\(30m^2\)\(1000m^2\)的消息,這個時候你就可以通過房子面積和房子所在區域之間的關系得到這兩所房子所在的區域

\[\begin{cases} 因為H_1的面積\,<50m^2,&H_1屬於A區的概率為1,H_1屬於B區的概率為0\quad\text{預測類別} \\ 因為H_2的面積\,>50m^2,&H_2屬於B區的概率為1,H_2屬於A區的概率為0\quad\text{預測類別} \end{cases} \]

在這個分類問題中:

  1. 房子面積稱為特征
  2. 房子所在區域稱為標記
![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101425344-959737444.jpg)

1.5.2 無監督學習

無監督學習(unsupervised learning):通過輸入一組未知標記的樣本,可以通過聚類(clustering)的方法,將數據分成多個簇(cluster)。

無監督學習的流程:

  1. 輸入:一組未知類別的樣本
  2. 輸出:分成多個簇的一組樣本

1.5.2.1 聚類

聚類(clustering):將數據集分成由類似的數據組成的多個類的過程被稱為聚類。由聚類所生成的簇是一組數據的集合,同一個簇中的數據彼此相似,不同簇中的對象相異。

  需要注意的是,組成多個簇的概念是由某種非人為定義的潛在概念自動生成的,而我們在監督學習中的分類都有明確的定義,即按照房子面積和房價的關系、房子面積和房子所在區域的關系。

序號 房子面積(m\(^2\))
1 10
2 20
3 40
4 100
5 200

  通過上表給出的數據集舉例,通過聚類可能把數據集中的5個數據分成兩個簇,即房子面積大於50的分為一個簇,房子面積小於50的為另一個簇,而這種通過面積分類並不是我們事先設定的,而是由聚類算法自己實現的。也就是說通過聚類把上表的數據集分為兩簇,但是我們需要在把數據集分成兩個簇后再去決定用什么概念定義這兩個簇的划分。

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101447676-59634807.png)

1.5.3 半監督學習

半監督學習(semi-supervised learning):監督學習與無監督學習相結合的一種學習方法。

  監督學習和無監督學習的區別主要在於數據集中的數據是否具有標記,當某個問題中的數據集中的數據具有標記時,我們稱之為監督學習;反之,我們稱之為無監督學習。

  目前,由於無監督學習算法的不穩定性,它一般作為中間算法,工業上使用較多的是監督學習算法。但是目前工業上累積較多的是不帶標記的數據,因此無監督學習在未來將是一個技術突破的重點目標。為了處理這批不帶標記的數據,也有科學家提出了半監督學習,它可以簡單的理解為監督學習和無監督學習的綜合運用,它即使用帶有標記的數據也使用不帶有標記的數據。

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101528425-812067206.jpg)

1.5.4 強化學習

強化學習(reinforcement learning):學習系統從環境到行為映射的學習,目標是使智能體獲得最大的獎勵,即強化信號最大。

  強化學習類似於無監督學習,但是又不同於無監督學習,強化學習針對的是無標記的數據,但是在強化學習算法對無標記的數據進行處理的同時會給出一個特定的目標,如果算法的處理結果偏離目標,則會給出懲罰;反之,給出獎勵,而該算法的目標就是為了獲得最大獎勵。強化學習一般用於無人駕駛。

1.6 Python語言的優勢

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101543413-1896422390.jpg)

  我們可以通過Python、R、C、Java、MATLAB、Octave等工具實現機器學習算法。本文接下來將通過Python實現,因此在這里簡單說說Python的優勢:語法清晰簡單、易於操作文本文件、優秀的開源社區提供了大量的開源軟件庫,如scikit-learn、tensorflow等。

  本文基於Python3.6+版本,不建議使用Python2.7版本。可以從https://www.python.org/downloads/下載Python。

  Anaconda作為Python的科學計算軟件包同樣非常適合機器學習。可以從https://www.anaconda.com/download/下載Anaconda。

  本文使用的機器學習軟件庫:

  • numpy 1.15.2
  • scipy 1.1.0
  • scikit-learn 0.20.0
  • matplotlib 3.0.2
  • xlrd 1.2.0
  • pandas 0.23.4
  • tensorflow 1.1.0
# 終端輸入,安裝numpy,其他第三庫同理
!pip install numpy==1.15.2
Requirement already satisfied: numpy==1.15.2 in /Applications/anaconda3/lib/python3.6/site-packages (1.15.2)
import numpy


# 打印sklearn的版本
numpy.__version__
'1.15.2'

1.7 小結

  機器學習可以淺顯的認為對數據做處理,分析數據得到某種預測或者判斷的能力。也就是說,只要有數據產生的地方,就會有機器學習的用武之地。在這個傳感器發達的時代,各行各業都積累着大量的數據,因此機器學習其實不僅僅是計算機專業的人需要習得的,就比如最早的專家系統,需要的是某個領域的專家和計算機科學家兩者共同努力才能完成一個專家系統。在未來,相信機器學習將會變得和英語一樣普及,它將會變得大眾化。

  本章主要帶大家介紹了人工智能、機器學習和深度學習的區別,並通過人體特征帶大家了解了機器學習中常用的術語。之后,使用房價/房子所在區域的例子帶大家認識了機器學習的目前最流行的四大分類算法,分別是監督學習、無監督學習、半監督學習和強化學習。本章最后也和大家介紹了我們未來需要使用的Python第三方庫。

  歡迎來到機器學習的世界。

![](https://img2018.cnblogs.com/blog/1825659/201910/1825659-20191011101613458-1224480627.png)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM