機器學習基本概念與定義(《機器學習實戰》筆記)

2021-10-05 12:00:32 字數 4409 閱讀 2251

基於例項的學習和基於模型的學習

機器學習主要面臨的挑戰

測驗與驗證

乙個簡單的擬合例子

在《機器學習實戰》書中,作者給出了兩個定義,首先是籠統的定義:

機器學習研究如何讓計算機不需要明確的程式也能具備學習能力

之後是更偏工程化的定義:

乙個電腦程式在完成任務t之後,獲得經驗e,其表現效果為p,如果任務t的效能表現,也就是用以衡量的p,隨著e的增加而增加,可以稱其為學習

系統用來學習的這些示例,稱為訓練集,每乙個訓練示例稱為訓練例項或者訓練樣本

相比於傳統的程式設計方法,使用機器學習解決問題的方式具有以下優點:

機器學習可以分為許多類別,以是否在人類的監督下訓練分:

是否可以動態的增量學習:

批量學習

是否將新的資料點和已知的資料點進行匹配,對訓練資料進行模式檢測,然後建立**模型:

在監督式學習中,所使用的資料集包含乙個解決方案,成為標籤或者標記

這種分類方式的乙個應用就是分類任務,另外乙個則是**變數。**變數指的是一組給定的特徵,比如書中提到的**汽車的**,這裡的屬性就可以是里程、使用年限等,要訓練這樣乙個系統,需要使用大量的資料以及它們的標籤(實際**)。

另外需要注意的是,在機器學習中,屬性是一種資料型別(如上面提到的里程),而特徵則可以看做屬性+對應的值,如里程=1500公里。

無監督式學習裡面的資料都是未經過標記的。系統會在沒有老師的情況下進行學習。它可以將相似的資料放在一組(儘管它不知道那一組具體是什麼),稱為聚類(與分類對應)。

無監督式學習還有乙個任務就是降維,其目的就是在不丟失太多資訊的前提下簡化資料,方法之一就是降多個相關特徵合併為乙個(比如將汽車年限和里程數合併為磨損度),降維的過程稱為特徵提取

另外乙個任務就是異常檢測,比如它可以在將另外乙個機器學習例項需要的資料輸入之前,檢測過濾掉其中的異常值。

最後乙個任務是關聯規則學習,用於挖掘資料並發現屬性之間的聯絡。

其訓練資料一般包括大量未標記的資料以及少量標記的資料,一般是無監督式學習以及監督式學習演算法的結合。

進行學習的過程中,不會給出資料的標籤,學習過程中如果做出一種決策,則會獲得回報或者懲罰,依次來自己進行學習。

批量學習的特點是無法進行增量學習,通常情況下都是離線完成的。離線學習指的是先使用訓練集在投入應用前進行訓練,訓練好後投入使用,使用的過程中無法學習新資料。如果想要學習新的資料,只能將其與舊資料混合在一起重新進行訓練。

另一種對機器學習系統進行分類的方法是看它們如何進行泛化。即通過在指定的訓練集上進行訓練,在面對未見過的資料集時也能給出期望的結果。泛化的方式有兩種:基於例項的學習和基於模型的學習。

系統先完全記住學習示例,然後通過某種相似度度量方式將其泛化到新的例項。

指的是構建示例的模型,然後使用該模型進行**。

一般我們使用效用函式來評價模型有多好,或者使用成本函式來衡量模型有多差。

主要面臨的兩個挑戰是「壞演算法」和「壞資料」。

壞資料報含以下幾點:

壞演算法則包含以下幾點:

為了了解我們訓練好的模型的泛化能力,我們需要對其進行測試。一般常用的手段是將資料集分為測試集訓練集。我們使用訓練集中的資料來訓練模型,然後使用測試集的資料測試訓練好的模型。應對新場景的誤差率稱為泛化誤差

如果訓練誤差很低但是泛化誤差很高,則說明模型存在過度擬合的問題。另外,一般情況下使用80%的資料進行訓練,剩下的20%資料用於測試。

一般情況下我們通過正則化來避免對資料的過度擬合,即約束模型來避免其過度複雜,那麼在解決問題的時候,我們就不可避免的要考慮選取合適的正則化引數(稱為超引數)。

乙個常見的解決方式是將資料集再單獨分離出來乙個集合,稱為驗證集。在訓練集上,使用不同的超引數來訓練模型,然後在驗證集上測試,選擇最好的那個模型和對應的超引數,如果結果滿意則進一步在測試集上獲取泛化誤差。

為了避免驗證集消耗過多資料,常常使用交叉驗證的方法:將訓練集分為若干個互補的子集,然後每個模型通過這些子集的不同組合來進行訓練,其餘子集用於驗證,之後將得到的合適的超引數和模型使用測試集得到泛化誤差。

在書中,作者給出了乙個簡單的擬合例子,用於擬合國家人均gdp和幸福指數的關係,在這裡我對部分**進行了修改使其能正常執行。裡面使用了pandas的部分功能,更具體的使用方法見我寫的其他部落格,使用的資料集見本文章的附件。

程式如下:

import pandas as pd

import sklearn

import matplotlib.pyplot as plt

from sklearn.linear_model import linearregression

import numpy as np

oecd_bli = pd.read_csv(

"datasets\lifesat\oecd_bli_2015.csv"

,thousands=

",")

gdp_per_capita = pd.read_csv(

"datasets/lifesat/gdp_per_capita.csv"

,thousands=

",",

delimiter=

"\t"

,encoding=

"latin1"

,na_values=

"n/a"

)#讀取原始的資料集

gdp_per_capita = gdp_per_capita.rename(columns=

)oecd_bli = oecd_bli.rename(columns=

)#修改一下列名

oecd_bli = oecd_bli[oecd_bli.indicator ==

"life satisfaction"

][oecd_bli.inequality ==

"total"

]#選擇合適指標(幸福指數)

df = pd.merge(oecd_bli,gdp_per_capita,how=

"inner"

,on=

"country"

)#將兩個資料集進行合併

df.plot(kind=

"scatter"

,x="gdp"

,y="life satisfaction score"

,xlim=[0

,60000

],ylim=[0

,10])

#合併後的的資料集中2015這一列代表gdp,value這一列代表幸福指數

plt.show(

)x = np.array(df[

"gdp"

].values)

.reshape(-1

,1)y = np.array(df[

"life satisfaction score"

].values)

.reshape(-1

,1)#將資料以numpy陣列的形式提取

lin_reg_model = sklearn.linear_model.linearregression(

)#選擇乙個模型

lin_reg_model.fit(x,y)

#訓練模型

x_new =[[

22587]]

#需要**的值 [[6.28653637]]

print

(lin_reg_model.predict(x_new)

)#輸出**結果

散點圖如下:

我們也可以使用k近鄰演算法,只需要將

lin_reg_model = sklearn.linear_model.linearregression()

替換為lin_reg_model = sklearn.neighbors.kneighborsregressor(n_neighbors=3)

即可

機器學習基本概念

什麼是學習?如果乙個系統能夠通過執行某個過程改進它的效能,這就是學習。赫爾伯特 西蒙 什麼是機器學習?對於某給定的任務 t 在合理的效能度量方案 p的前提下,電腦程式可以通過自主學習任務 t 的經驗 e 隨著提供合適,優質,大量的經驗 e 該程式對於任務 t的效能逐步提高。任務,經驗,效能 什麼是統...

機器學習基本概念

1.基本的概念 領域集 乙個任意的集合 集合中的例項是我們希望能夠貼上標籤的資料。的元素稱為例項。標籤集 學習器所追求的結果集合。可以為,器想要得到的最終資料。訓練資料 帶標籤的領域及元素集合,通常會組成乙個區域性聚合s,也叫作訓練集。2.機器學習的一般流程 採集資料 標記 訓練 得到 器 乙個學習...

機器學習基本概念

1.基本概念 訓練集 測試集 特徵值 監督式學習 非監督學習 半監督學習 分類 回歸 2.概念學習 概念學習是指從某個布林函式的輸入輸出訓練樣例中推斷出該布林函式。3.樣例 天氣 溫度 濕度 風力 水溫 預報 享受運動 1 晴 暖 普通 強 暖 一樣 是 2 晴 暖 大 強 暖 一樣 是 3 雨 冷...