機器學習緒論
機器學習概念
機器學習
- 有監督學習
- 如:迴歸,分類
- 無監督學習
- 如:聚類,降維
什麼是機器學習
-
程式透過不斷的學習達到一定的效能,可以完成指定的任務
-
定義
-
(1)機器學習是一門人工智慧的科學,該領域的主要研究物件是人工智慧,特別是如何在經驗 學習中改善具體演算法的效能。
(2)機器學習是對能透過經驗自動改進的計算機演算法的研究。
(3)機器學習是用資料或以往的經驗,以此最佳化計算機程式的效能標準
-
-
機器學習的三個要素
- 模型(model):模型在未進行訓練前,其可能的引數是多個甚至無窮的,故可能的模型也是多個甚至無窮的,這些模型構成的集合就是假設空間。
- 策略(strategy):即從假設空間中挑選出引數最優的模型的準則。模型的分類或預測結果與實際情況的誤差(損失函式)越小,模型就越好。那麼策略就是誤差最小。
- 演算法(algorithm):即從假設空間中挑選模型的方法(等同於求解最佳的模型引數)。機器學習的引數求解通常都會轉化為最最佳化問題,故學習演算法通常是最最佳化演算法,例如最速梯度下降法、牛頓法以及擬牛頓法等
機器學習演算法
- 監督學習 :房價預測 ( 迴歸 )
- 監督學習
- 正確價格
- 迴歸問題
- 預測價格
- 監督學習
- 監督學習 :垃圾郵件分類 ( 分類 )
- 監督學習
- \(y\in\lbrace 0,1\rbrace\) 0表示負向類 1表示正向類
- 分類問題
- 對郵件的好壞進行區分
- 監督學習
- 無監督學習 **:聚類 **
- 如:郵件分類 沒有指定哪些是正向類,哪些是負向類,無監督學習可以將它們分為不同的簇,這就是聚類
- 如新聞分類,同一個新聞主題的多個報導網頁都放到同一個簇別中一起展示,這就是聚類演算法的應用
- 總結
- 監督學習:所用訓練資料都是被標記過的
- 無監督學習:訓練集中的所有資料都沒有標記
補充
矩陣
由 m × n 個數\(A_ij\)排成的m行n列的數表稱為m行n列的矩陣,簡稱m × n矩陣。記作:
\[A =
\left[
\begin{array}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
a_{31} & a_{32} & \cdots & a_{3n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \cdots & a_{mn} \\
\end{array}
\right]
\]
這種 \(m\times n\) 個數稱為矩陣 \(A\) 的元素 \(A_{ij} = i,j\) 代表 \(i 行,j列\)
向量
´ 向量:在數學中,向量(也稱為歐幾里得向量、幾何向量、向量),指具有大小和方向的量。與向量對應的只有大小,沒有方向的量叫做數量(物理學中稱標量)
是一行或一列的特殊矩形,通常情況下,向量指列向量
向量:一個 \(n\times 1\) 矩陣
\[Y =
\left[
\begin{array}\\
{11} \\
{21} \\
{31} \\
40 \\
\end{array}
\right]
\]
矩陣運算
- 舉例
\[A =\left[
\begin{array}\\
a1 & a2 \\
a3 & a4 \\
\end{array}
\right]
B = \left[
\begin{array}\\
b1 & b2 \\
b3& b4 \\
\end{array}
\right]
\]
-
矩陣加法,減法
- 滿足交換律 : A+B = B+A , A - B = B - A\[A+B =\left[ \begin{array}\\ a1 + b1 & a2+b2 \\ a3+b3&a4+b4 \\ \end{array} \right] \]減法相同
- 滿足交換律 : A+B = B+A , A - B = B - A
-
矩陣乘法
-
乘法條件:兩個矩陣相乘,需要滿足A的列數等於**B的行數*
-
A矩陣的行元素 ,乘以 B 的每一列然後相加
\[A * B =\left[ \begin{array}\\ a1*b1+a2*b3&a1*b2+a2*b4\\ a3*b1+a4*b3&a3*b2+a4*b4 \end{array} \right] \] -
乘法不滿足交換律,但滿足分配率和結合率
- AB \(\neq\) BA
- (AB)C=A(BC)
- (A+B)C=AC+BC
- C(A+B)=CA+CB
-
-
逆矩陣
-
**逆矩陣 ** : 如果 A 是一個m x m 矩陣, 並且如果它有逆矩陣。
矩陣與其逆陣的乘積等於單位陣:
$AA^{-1} = A^{-1}A = I $
-
不是所有的矩陣都有逆矩陣
沒有逆矩陣的矩陣稱為“奇異矩陣” 或“退化矩陣”。
-
-
矩陣轉置
- 例如:\[A =\left[ \begin{array}\\ 1 & 2 &3\\ 4 & 5 &6\\ \end{array} \right] A^T =\left[ \begin{array}\\ 1 &4\\ 2&5\\ 3&6\\ \end{array} \right] \]
- 例如:
-
線性方程
\[\begin{cases} a_{11}x_1+a_{12}x_2+a_{13}x_3=y1 \\ a_{21}x_1+a_{22}x_2+a_{23}x_3=y2 \\ a_{31}x_1+a_{32}x_2+a_{33}x_3=y3 \\ \end{cases} \]\[若y = \left[ \begin{array}\\ y1\\ y2\\ y3 \end{array} \right] , A = \left[ \begin{array}\\ a_{11} &a_{12}&a_{13}\\ a_{21}&a_{22}&a_{32}\\ a_{31}&a_{32}&a_{33}\\ \end{array} \right] , x = \left[ \begin{array}\\ x_1\\ x_2\\ x_3\\ \end{array} \right] 所以 \left[ \begin{array}\\ y1\\ y2\\ y3 \end{array} \right] = \left[ \begin{array}\\ a_{11} &a_{12}&a_{13}\\ a_{21}&a_{22}&a_{32}\\ a_{31}&a_{32}&a_{33}\\ \end{array} \right] \left[ \begin{array}\\ x_1\\ x_2\\ x_3\\ \end{array} \right] \] -
線性組合
-
程式碼實現轉置
y = w.T.dot(x)
-
\[y = \sum w_ix_i = w_1x_1 + w_2x_2+...w_nx_n
\]
\[= \left[
\begin{array}\\
w_1w_2 ...w_n
\end{array}
\right]
\left[
\begin{array}\\
x_1\\
x_2\\
\vdots
x_n
\end{array}
\right]
=w^Tx
\]
\[= \left[
\begin{array}\\
x_1x_2 ...x_n
\end{array}
\right]
\left[
\begin{array}\\
w_1\\
w_2\\
\vdots
w_n
\end{array}
\right]
=x^Tw
\]
-
np.array 的使用
from numpy import * import numpy as np # 使用np.array建立矩陣: np.array([[1,4],[3,5]]) # 使用mat建立矩陣: mat(‘[1 2;3 4]’) # 用;隔開,用‘ ’括上;也可以mat([1,2],[3,4]) # 建立3*3的零矩陣: np.zeros((3,3)) # 建立2*4的1矩陣 : np.ones((2,4)) #預設是浮點型的資料 # 建立2*2的單位矩陣: np.eye(2,2,dtype=int) #注意沒有多餘的() # 建立對角矩陣: np.diag([1, 2, 3]) # 建立有序矩陣: np.arange(2,12,2) np.sum(): 按列或行求和,A.sum(axis=0); sum(A,1); sum(A[2:5], 0) np.max(): 按列或行求最大值,A.max(axis=0); A.max(1); max(A[2:5],0) np.min(): 按列或行求最小值,A.min(0); A.min(1); min(A[2:5],1) np.argmax(): 列或行最大值的索引,A.argmax(axis=0); argmax(A[2:5],1) np.argmin(): 列或行求最大值的索引,A.argmin(0); argmin(A[2:5],0) (引數 axis=0, 按列 axis=1,按行 )
-
slice切片
A[ 起始位:終止位:步長 ] 1.每個元素可用正向下標(從0開始)或反向下標(從-1開始)表示, 2.步長預設=1,可省略 A=np.array([1,2,3,4,5,6]): 正向下標:0 ~ 5 反向下標:-1~-6 # A[1:5]->[2,3,4,5] (正向,預設步長=1) # A[2:] ->[3,4,5,6] (正向,預設步長=1) # A[:5] ->[1,2,3,4,5] (正向,預設步長=1) # A[::2]->[1,3,5] (正向,步長=2) # A[1:5:2]->[2,4] (正向,步長=2) # A[-1:-4:-1]->[6,5,4] (反向,步長=-1) # A[-1::-1]->[6,5,4,3,2,1] (反向,步長=-1) # A[-2:-5:-2]->[5,3] (反向,步長=-2) # A[1:-2]->[2,3,4] (正向,預設步長=1) # A[-1:2:-1]->[6,5,4] (反向,步長=-1)
-
vstack , hstack 的使用
from numpy import * import numpy as np # 建立2行2列的全1矩陣 a=np.ones((2,2)) # 建立2行2列的全零矩陣 b=np.eye(2,2) # 按列方向合併兩個矩陣,列數不變,行數相加 vstack((a,b)) [[1, 1] [1, 1] [1, 0] [0, 1]] # 按行方向合併兩個矩陣, 行數不變,列數相加 hstack((a,b)) [[1, 1, 1, 0] [1, 1, 0, 1]]
-
**np.c_ ** np.r _ 的使用
from numpy import * import numpy as np # np.c_ : 按列連線兩個矩陣 # np.r_: 按行連線兩個矩陣 1. a = np.array([1, 2, 3]); b = np.array([4, 5, 6]) c = np.c_[a,b] ->[[1, 4 ], [2, 5], [3 6]] c = np.c_[c,a] -> [[1, 4, 1], [2, 5, 2], [3, 6, 3]] c = np.r_[a,b] -> [1, 2, 3, 4, 5, 6] 2. a = np.array([[1, 2, 3],[1,1,1]]); b = np.array([[4, 5, 6],[7,8,9]]) c =np.c_[a,b]->[[1, 2, 3, 4, 5, 6], [1, 1, 1, 7, 8, 9]] c = np.r_[a,b] -> [[1, 2, 3], [1, 1, 1], [4, 5, 6], [7, 8, 9]]
-
畫圖 matplotlib
import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams["font.sans-serif"] = ["SimHei"] #在畫布中顯示中文 matplotlib.rcParams['axes.unicode_minus']=False #畫布中顯示負號 x=[1.5,0.8,2.6,1.0,0.6,2.8,1.2,0.9,0.4,1.3,1.2,2.0,1.6,1.8,2.2] y=[3.1,1.9,4.2,2.3,1.6,4.9,2.8,2.1,1.4,2.4,2.4,3.8,3.0,3.4,4.0] #建立畫布 plt.figure("散點圖") #畫圖 plt.scatter(x,y) #線性迴歸公式 w = 1.5 b = 0.8 x_min=min(x) x_max=max(x) y_min = w*x_min + b y_max = w*x_max + b #畫出迴歸方程 plt.plot([x_min,x_max],[y_min,y_max],'r') plt.show()
總結
- 透過上圖我們可以知道,不斷的更換 w 和 b 可以讓直線擬合散點圖
- 所以 在機器學習中線性迴歸模型,就是在不斷的更新 w 和 b 找到 w 和 b 的最優解