1. 程式人生 > >機器學習概覽2

機器學習概覽2

-什麼是機器學習?

機器學習就是一段可以從經驗中學習計算機程式,關於一些任務T和以及程式在任務T中的表現的效能評估P,程式能隨著經驗不斷的提升效能。

-更多關於機器學習的定義

機器學習是一門讓計算機在不被明確程式設計的情況下行動的科學。---吳恩達

機器學習是一項能幫助計算機從現有資料中學習,以便預測未來的行為,結果和趨勢的資料科學技術。---微軟

-機器學習利用歷史資料進行預測

-機器學習是如何工作的

-機器學習任務的案例

讓我們討論一下你的租賃汽車?

你如何能準確預測對你租車產品的需求呢?

你需要的是如下回歸分析

-建立機器學習解決方案的步驟

-傳統方法和機器學習方法的區別

-其他相關定義

機器學習就是利用歷史資料進行預測。

機器學習和資料探勘非常相似,資料探勘是一門在資料中發現未知規則的和關係的學科,而機器學習則是根據先前推斷出的知識,利用新的資料在現實生活應用場景中做出預測的學科。

  1. 從歷史資料中計算出近似複雜的函式
  2. 規則不是清晰定義的而是從資料中學習得來的。

-什麼時候應該使用機器學習呢?

從商業問題到機器學習問題:一份食譜:一步一步把商業問題轉化為機器學習問題。

  1. 你需要機器學習嗎?
  2. 你能清晰的闡述你的問題嗎?
  3. 你有足夠多的樣本嗎?
  4. 你的問題有一個通用的模式嗎?
  5. 你能發現有代表性意義的資料嗎?
  6. 你如何定義成功?

-商業問題轉換為機器學習問題的食譜

什麼時候用機器學習?

問題模式化

收集資料

資料中的規律

代表性和特徵

評估成功

商業問題轉機器學習問題流程

-應用案例:自然語言處理

案例1:支援票分類

  1. 你需要機器學習嗎?
  1. 大量的支援票
  2. 人類語言非常複雜和模稜兩可的
  1. 你能清晰的闡述問題嗎?
  1. 給定一個客戶的支援票,預測他的服務型別
  2. 輸入:客戶支援票;輸出:服務類別
  1. 你有足夠的樣本嗎?
  1. 大量來自支援票系統的帶有服務類別的客戶支援票
  1. 你的問題有一個常規模式嗎?
  1. 日常客戶問題會有很多票
  2. 這些問題常伴隨著常用詞,例如:賬單或者支付會經常出現在具有支付型別的支援票裡
  1. 你能找到具有代表意義的資料嗎?
  1. 利用詞向量代表客戶支援票
  2. 標籤就是客戶支援票的型別
  1. 你如何定義成功呢?
  1. 度量服務型別預測準確率

案例2:零售貨架分析

給定一張零售貨架圖片,檢測圖片中出現的所有商品並與計劃佈局進行比較。

  1. 你需要機器學習嗎?
  1. 每天大量人為調節商品貨架
  2. 利用簡單的規則檢測貨架中不可能的商品
  1. 你能清晰的闡述問題嗎?
  1. 給定一個貨架圖片,首先檢測商品然後與計劃的貨架佈局對比他們的位置
  2. 輸入:圖片;輸出:商品包裝邊界
  1. 你有足夠的樣本嗎?
  1. 收集大量的零售貨架圖片並認為的指定商品包裝邊界標籤
  1. 你的問題有一個常規模式嗎?
  1. 商品包裝具有固定的形狀,顏色和商標
  1. 你能找到具有代表意義的資料嗎?
  1. 將圖片裝換為畫素陣列
  2. 帶有商品補丁的圖片為正樣本,隨機商品補丁的是負樣本
  1. 你如何定義成功呢?
  1. 度量商品邊界的準確率和召回率
  2. 盒子和檢測到的佈局與真實佈局的相似性

-什麼時候應該使用機器學習呢?

當你有一個包含大量資料和變數的非常複雜的任務或者問題,但是沒有一個通用的公式或者方程時,可以考慮使用機器學習。例如:如果你碰到如下問題,那麼機器學習是一個不錯的選擇:

-機器學習步驟

-如何建立機器學習模型

-機器學習工作流

-經典機器學習任務

-案例:如何利用簡單模型預測結果

例如:預測鑽石的價格

假設我想購買一塊鑽石,然後你有一個關於鑽石會花費多少錢的想法。我帶著筆和筆記本來到珠寶店,我幾下了所有鑽石的價格和它的克拉數,從第一顆鑽石開始:他有1.01克拉重價格是7366美元。現在我也記錄了其他珠寶店的鑽石價格可克拉數。

價格表如下:

從散點圖可以看出鑽石的價格隨重量的增加而增高,而且具有一定的線性關係,所以我們可以通過繪製一條直線來建立一個模型,以預測未知重量鑽石的價格。事實上並不是所有點都能很好的擬合一條直線,而資料科學家給出的解釋是:每一個點具有一些噪聲或者方差的線性模型。

完美的模型能擬合所有的點,但是現實世界裡總是充滿噪聲和不確定性。因為完美師徒回答鑽石花費多少的問題,是預測一個值,所以叫做迴歸,而完美用的是一條直線進行預測所以又叫做線性迴歸。擬合曲線如下圖:

利用模型去尋找答案:

現在我們已經有了一個模型,利用這個模型就可以回答1.35克拉的鑽石到底花費多少。為了回答這個問題,我們沿著1.35作一條垂直線與模型直線相交,然後根據焦點作一條水平線與Y軸相交,焦點則是我們要的結果7739美元。哇哦:那麼答案就是1.35克拉的鑽石應該花費你7739美元。

建立一個置信區間:雖然經過努力我們預測出1.35克拉的鑽石需要花費大概7739美元,但是很自然的我們希望知道這個預測結果的精確度能達到多少?知道1.35克拉的鑽石價格是非常接近7739還是高於或者低於這個價格是非常有用的。為了畫出這個結果,我們可以畫出一個圍繞回歸線的信封,包含了大部分的資料點,這個信封叫做我們的置信區間:我們非常確信價格會落在這個信封之內,因為過去他們中的大多數都有。我們可以從1.35克拉的直線畫兩條水平線。穿過那個信封的頂部和底部。

現在我們可以說一些關於置信區間的事情:我們可以自信的說1.35克拉的鑽石價格可能是7739美元,但是它也可能低至6300美元或者高至9000美元。

最終程式碼:

# -*- coding=UTF-8 -*-from sklearn.linear_model import LinearRegressionimport matplotlib.pyplot as pltimport matplotlibimport numpy as npdef plot_scatter(k, b):     font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\STXINGKA.TTF')     weight = [1.01, 0.49, 0.31, 1.51, 0.37, 0.73, 1.53, 0.56, 0.41, 0.74, 0.63, 0.6, 2.06, 1.1, 1.31]     price = [7366, 985, 544, 9140, 493, 3011, 11413, 1814, 876, 2690, 1190, 4172, 11764, 4682, 6172]     plt.plot(weight, k*weight + b)# 迴歸曲線     plt.plot(weight, k * weight + b +1000, c='b')     plt.plot(weight, k * weight + b -1000, c='b')     plt.scatter(1.35, k * 1.35 + b, marker='o', c='r')     plt.text(1.4, k * 1.35 + b, s="%d$" % int(k * 1.35 + b))     plt.scatter(np.linspace(0, 1.35, 20), [8740] * 20, marker='.', c='y')     plt.scatter(np.linspace(0, 1.35, 20), [int(k * 1.35 + b)]*20, marker='.', c='y')     plt.scatter([1.35]*20, np.linspace(0, 8740, 20), marker='.', c='y')     plt.scatter(np.linspace(0, 1.35, 20), [6740] * 20, marker='.', c='y')     plt.scatter(weight, price, marker='+')     plt.xlabel("重量(克拉)", fontproperties = font)     plt.ylabel("價格(美元)", fontproperties = font)     plt.title("鑽石的價格隨重量的變化!", fontproperties = font)     plt.grid()     plt.show()def lr():     weight = [1.01, 0.49, 0.31, 1.51, 0.37, 0.73, 1.53, 0.56, 0.41, 0.74, 0.63, 0.6, 2.06, 1.1, 1.31]     price = [7366, 985, 544, 9140, 493, 3011, 11413, 1814, 876, 2690, 1190, 4172, 11764, 4682, 6172]     model = LinearRegression()     model.fit(X=[[e] for e in weight], y=price)     k, b = model.coef_, model.intercept_     plot_scatter(k, b)if __name__ == '__main__':     lr()

小結:緊接上一篇,繼續介紹了一些機器學習的應用場景,然後從機器學習的經典定義開始著重分析了機器學習建模流程,和機器學習的典型任務分類和迴歸。最後給了一個迴歸任務的例子,根據鑽石的重量價格資料預測給定重量情況下鑽石價格,例子裡提出了置信區間的概念,是一個衡量機器學習任務的度量,最後的程式碼是利用sklearn庫對資料進行線性迴歸建模計算出擬合曲線的斜率和截距,然後繪製散點圖和置信區間。