01-01 機器學習

[TOC] 更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlhtml

機器學習

可能有不少同窗想到高大上的人工智能、機器學習和深度學習,會在懷疑我是否能學會。在自我懷疑以前,我但願你能考慮一個問題,你瞭解機動車的構造原理嗎?難道你不瞭解機動車的構造就不能開車了嗎?咱們的機器學習也是如此,你只要拿到一張「駕駛證」,你就能很好的應用它,而且能經過本文的學習,快速的爲公司、爲企業直接創造價值。python

機器學習已經不知不覺的走入了咱們的生活,咱們可能沒法干涉它的崛起,也可能沒法建立如十大算法同樣的算法。但現現在生活的方方面面都有着機器學習的身影,爲何咱們不試着去認識它呢,讓咱們能在機器學習完全降臨以前作好駕馭它的準備呢?算法

宇宙飛船駕駛證

1、學習目標

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

2、人工智能

人工智能-機器學習-深度學習

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

人工智能被新聞媒體吹捧的讓人高不可攀,可是細心的你可能會發現人工智能其實已經走入了咱們的生活,而且已經步入如下幾個領域。網絡

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

最後,引用《終極算法》中的一段話:"咱們可能沒法阻擋人工智能發展的趨勢,可是咱們能夠學會和他作朋友。"數據結構

3、機器學習

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

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

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

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()

![png](http://www.chenyoude.com/ml/01-01 機器學習_11_0.png?x-oss-process=style/watermark)字體

經過上圖,咱們能夠習得如下機器學習的基本術語:

  • 特徵(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)$。

4、深度學習

**深度學習(deep learning):**經過組合低層屬性特徵造成更加抽象的高層屬性特徵。如學英語的時候,「Nick handsome」這12個英文單詞是低層屬性特徵,而「Nick handsome」的語義則是抽象的高層屬性特徵。

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

A-Z字母表

5、機器學習分類

機器學習依據數據集數據格式的不一樣,能夠劃分紅監督學習和無監督學習;依據算法模式的不一樣能夠劃分爲監督學習、無監督學習、半監督學習和強化學習。

監督學習和無監督學習2

5.1 監督學習

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

監督學習的流程:

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

因爲數據標記的類型不一樣,監督學習問題又分爲迴歸問題和分類問題:

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

5.1.1 迴歸問題

序號 房子面積(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()

![png](http://www.chenyoude.com/ml/01-01 機器學習_23_0.png?x-oss-process=style/watermark)

經過上表給出的數據集(一組已知標記的樣本)舉例,經過數據集中的數據,咱們能夠假設房子面積和房價之間存在某種關係(模型)爲

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

假設你在獲得房子面積和房價之間的關係後,獲得了上海二環某一所房子$H_1$的面積爲$1000m^2$的消息(將來新數據),這個時候你就能夠經過$H_1$的房子面積和房價之間的關係獲得這所房子的價格爲

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

在這個迴歸問題中:

  1. 房子面積稱爲特徵(feature)
  2. 房價稱爲標記(label)

5.1.2 分類問題

序號 房子面積(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()

![png](http://www.chenyoude.com/ml/01-01 機器學習_27_0.png?x-oss-process=style/watermark)

一樣經過上表給出的數據集舉例,經過數據集的數據,咱們能夠假設房子面積和房子所在區域存在某種關係爲

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

其中$P(A區|房子面積<50m2)$爲條件機率,即當知足$房子面積<50m2$條件時房子所在區域爲$A區$的機率;$P(B區|房子面積>50m2)$也爲條件機率,當知足$房子面積>50m2$條件時房子所在區域爲$B$區的機率。

假設你在獲得房子面積和房子所在區域的關係後,獲得了上海二環內兩所房子$H_1$和$H_2$面積分別爲$30m2$和$1000m2$的消息,這個時候你就能夠經過房子面積和房子所在區域之間的關係獲得這兩所房子所在的區域

\[ \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. 房子所在區域稱爲標記

5.2 無監督學習

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

無監督學習的流程:

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

5.2.1 聚類

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

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

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

經過上表給出的數據集舉例,經過聚類可能把數據集中的5個數據分紅兩個簇,即房子面積大於50的分爲一個簇,房子面積小於50的爲另外一個簇,而這種經過面積分類並非咱們事先設定的,而是由聚類算法本身實現的。也就是說經過聚類把上表的數據集分爲兩簇,可是咱們須要在把數據集分紅兩個簇後再去決定用什麼概念定義這兩個簇的劃分。

5.3 半監督學習

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

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

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

監督學習和無監督學習1

5.4 強化學習

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

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

6、Python語言的優點

咱們能夠經過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'

7、小結

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

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

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

相關文章
相關標籤/搜索