呼市建設(shè)官方網(wǎng)站四川網(wǎng)絡(luò)推廣seo
引言
為何現(xiàn)在機(jī)器學(xué)習(xí)如此熱門?
主要原因是由于“人類無(wú)論如何也做不到在短時(shí)間內(nèi)實(shí)現(xiàn)從大量的數(shù)據(jù)中自動(dòng)的計(jì)算出正確的結(jié)果操作”。
什么是機(jī)器學(xué)習(xí)?
所謂的機(jī)器學(xué)習(xí),就是通過(guò)對(duì)數(shù)據(jù)進(jìn)行反復(fù)的學(xué)習(xí),來(lái)找出其中潛藏的規(guī)律和模式。
機(jī)器學(xué)習(xí)中所用算法大致分為
- 監(jiān)督學(xué)習(xí)(Supervised Learnings)
- 無(wú)監(jiān)督學(xué)習(xí)(Unsuoervised Learning)
- 強(qiáng)化學(xué)習(xí)(Reinforcement Learning)
一、各類機(jī)器學(xué)習(xí)算法簡(jiǎn)介
理解監(jiān)督學(xué)習(xí)
所謂監(jiān)督學(xué)習(xí)中的“監(jiān)督”,是指“數(shù)據(jù)中附帶的正確答案標(biāo)簽”。那么,“數(shù)據(jù)中附帶的正確答案標(biāo)簽”指的是什么呢?
如上圖,對(duì)于表示內(nèi)容的數(shù)據(jù)我們稱為“正確答案標(biāo)簽”,像①~③這樣,最終對(duì)數(shù)據(jù)所屬類別進(jìn)行預(yù)測(cè)的應(yīng)用,我們稱之為“分類問(wèn)題”。而數(shù)據(jù)④是基于面積等量化數(shù)據(jù),這種用于對(duì)類似房租這樣連續(xù)變化的數(shù)值進(jìn)行預(yù)測(cè),我們將其稱為“回歸問(wèn)題”。
簡(jiǎn)單來(lái)說(shuō),監(jiān)督學(xué)習(xí)的基本原理就是使用大量的數(shù)據(jù),通過(guò)計(jì)算機(jī)對(duì)數(shù)據(jù)進(jìn)行反復(fù)處理,最終能夠產(chǎn)生接近正確答案標(biāo)簽的輸出值。
理解無(wú)監(jiān)督學(xué)習(xí)
對(duì)比監(jiān)督學(xué)習(xí),監(jiān)督學(xué)習(xí)包含“正確答案標(biāo)簽”,而“無(wú)監(jiān)督學(xué)習(xí)”中是不包含“正確答案標(biāo)簽”的,其屬于從輸入的數(shù)據(jù)中發(fā)現(xiàn)規(guī)則,并進(jìn)行學(xué)習(xí)的一種方法。監(jiān)督學(xué)習(xí)會(huì)告訴計(jì)算機(jī)正確的答案,而無(wú)監(jiān)督學(xué)習(xí)則是使用計(jì)算機(jī)去推導(dǎo)答案。因而無(wú)監(jiān)督學(xué)習(xí)具有不存在所謂正確或者錯(cuò)誤答案的特點(diǎn)。
無(wú)監(jiān)督學(xué)習(xí)多用于熱賣商品的推薦、飲食店的推薦菜等應(yīng)用場(chǎng)合。此外,在對(duì)多維數(shù)據(jù)中的信息進(jìn)行壓縮(又稱為主成分分析、數(shù)據(jù)降維等)。
理解強(qiáng)化學(xué)習(xí)
“強(qiáng)化學(xué)習(xí)”也不需要監(jiān)督,強(qiáng)化學(xué)習(xí)提供“智能體”和“環(huán)境”。配備智能體和環(huán)境后,智能體會(huì)根據(jù)環(huán)境的變化采取相應(yīng)的行動(dòng),環(huán)境將根據(jù)行動(dòng)的結(jié)果給予智能體相應(yīng)的“報(bào)酬”,而智能體根據(jù)其獲取的報(bào)酬,對(duì)行動(dòng)做出“好”或者“不好”的評(píng)價(jià),并以此決定下次該如何采取行動(dòng)。
二、機(jī)器學(xué)習(xí)的流程簡(jiǎn)介
進(jìn)行機(jī)器學(xué)習(xí)的整體流程
- 數(shù)據(jù)收集
- 數(shù)據(jù)清洗(清洗重復(fù)或缺失的數(shù)據(jù),以提高數(shù)據(jù)的精度)
- 運(yùn)用機(jī)器學(xué)習(xí)算法對(duì)數(shù)據(jù)進(jìn)行學(xué)習(xí)(獲取基準(zhǔn))
- 使用測(cè)試數(shù)據(jù)進(jìn)行性能評(píng)測(cè)
- 將機(jī)器學(xué)習(xí)模型安裝到網(wǎng)頁(yè)等應(yīng)用環(huán)境中
學(xué)習(xí)數(shù)據(jù)的使用方法
在機(jī)器學(xué)習(xí)的“監(jiān)督學(xué)習(xí)中”,我們將需要處理的數(shù)據(jù)劃分為“訓(xùn)練數(shù)據(jù)”和“測(cè)試數(shù)據(jù)兩種”。其中“訓(xùn)練數(shù)據(jù)”指的是學(xué)習(xí)過(guò)程中所使用的數(shù)據(jù),而“測(cè)試數(shù)據(jù)”是指在學(xué)習(xí)完成之后對(duì)模型精度進(jìn)行評(píng)估時(shí)所使用的數(shù)據(jù)。
之所以將數(shù)據(jù)分為“訓(xùn)練數(shù)據(jù)”和“測(cè)試數(shù)據(jù)”,是因?yàn)?strong>機(jī)器學(xué)習(xí)是以“預(yù)測(cè)未知數(shù)據(jù)”為目的的學(xué)術(shù)體系。而對(duì)比統(tǒng)計(jì)學(xué)是分析數(shù)據(jù)對(duì)產(chǎn)生這一數(shù)據(jù)的背景進(jìn)行描述的學(xué)術(shù)體系。
留出法的理論與實(shí)踐
所謂留出法,是指將所給的數(shù)據(jù)集劃分為訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)這兩種數(shù)據(jù)的一種簡(jiǎn)單方法。
接下來(lái)將使用第三方軟件庫(kù)Scikit-Learn來(lái)進(jìn)行留出法的實(shí)踐操作,Scikit-Learn是Python的開(kāi)源機(jī)器學(xué)習(xí)專用軟件庫(kù)。
- 關(guān)于train_test_split()函數(shù)介紹:
train_test_split() 是 scikit-learn(sklearn)庫(kù)中的一個(gè)非常重要的函數(shù),它用于將數(shù)據(jù)集分割成訓(xùn)練集和測(cè)試集,以便進(jìn)行機(jī)器學(xué)習(xí)模型的訓(xùn)練和評(píng)估。該函數(shù)的主要作用是隨機(jī)將數(shù)據(jù)集中的樣本按照指定的比例分為兩部分,一部分用于訓(xùn)練模型,另一部分用于測(cè)試模型的性能。
以下是 train_test_split 函數(shù)的一般用法和參數(shù)解釋:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
參數(shù)說(shuō)明:
- X: 特征矩陣,包含了樣本的特征數(shù)據(jù)。
- y: 目標(biāo)標(biāo)簽,包含了每個(gè)樣本對(duì)應(yīng)的目標(biāo)值(標(biāo)簽)。
- test_size: 測(cè)試集的大小,可以是浮點(diǎn)數(shù)(表示測(cè)試集占總樣本的比例)或整數(shù)(表示測(cè)試集中的樣本數(shù)量)。例如,test_size=0.2 表示將數(shù)據(jù)集的20%用于測(cè)試,而80%用于訓(xùn)練。
- train_size: 訓(xùn)練集的大小,如果不指定,會(huì)自動(dòng)計(jì)算為 1 - test_size。
- random_state: 隨機(jī)種子,用于控制數(shù)據(jù)集的隨機(jī)分割過(guò)程。設(shè)置相同的隨機(jī)種子可以確保每次運(yùn)行代碼時(shí)得到相同的分割結(jié)果,這對(duì)于實(shí)驗(yàn)的可復(fù)現(xiàn)性非常重要。
- shuffle: 默認(rèn)情況下,數(shù)據(jù)會(huì)被隨機(jī)打亂(shuffle),以確保分割是隨機(jī)的。如果希望關(guān)閉數(shù)據(jù)的隨機(jī)打亂,可以將該參數(shù)設(shè)置為 False。
函數(shù)的返回值包括四個(gè)部分:
- X_train: 訓(xùn)練集的特征矩陣。
- X_test: 測(cè)試集的特征矩陣。
- y_train: 訓(xùn)練集的目標(biāo)標(biāo)簽。
- y_test: 測(cè)試集的目標(biāo)標(biāo)簽。
# 讀取執(zhí)行代碼所需的模塊
from sklearn import datasets
from sklearn.model_selection import train_test_split# 讀取名為Iris的數(shù)據(jù)集
iris = datasets.load_iris() #這一行代碼從scikit-learn的datasets模塊中加載了鳶尾花數(shù)據(jù)集,將數(shù)據(jù)存儲(chǔ)在名為iris的變量中。
X = iris.data #這一行代碼將鳶尾花數(shù)據(jù)集中的特征數(shù)據(jù)存儲(chǔ)在名為X的變量中。每行代表一朵鳶尾花,每列代表不同的特征(如花瓣長(zhǎng)度、花瓣寬度等)。
y = iris.target #這一行代碼將鳶尾花數(shù)據(jù)集中的目標(biāo)標(biāo)簽存儲(chǔ)在名為y的變量中。每個(gè)標(biāo)簽對(duì)應(yīng)于相應(yīng)鳶尾花的種類# 「X_train, X_test, y_train, y_test」存儲(chǔ)數(shù)據(jù)
#這一行代碼使用train_test_split函數(shù)將數(shù)據(jù)集分割成訓(xùn)練集(X_train和y_train)和測(cè)試集(X_test和y_test)。
#參數(shù)test_size=0.2表示將數(shù)據(jù)集的20%用于測(cè)試,而80%用于訓(xùn)練。random_state參數(shù)用于設(shè)置隨機(jī)種子,以確保每次運(yùn)行代碼時(shí)都得到相同的隨機(jī)劃分。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=___, random_state=0)# 檢查訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)的大小
print ("X_train :", X_train.shape) #表示訓(xùn)練集中特征矩陣的形狀(行數(shù)和列數(shù)
print ("y_train :", y_train.shape) #這表示訓(xùn)練集中目標(biāo)標(biāo)簽的形狀
print ("X_test :", X_test.shape)
print ("y_test :", y_test.shape)
輸出結(jié)果:
過(guò)擬合
在根據(jù)數(shù)據(jù)的模式構(gòu)建成的計(jì)算機(jī)中,繼續(xù)輸入新的數(shù)據(jù)時(shí),只要數(shù)據(jù)中不存在嚴(yán)重的雜亂成分,計(jì)算機(jī)就可以正確的根據(jù)數(shù)據(jù)的模型對(duì)其進(jìn)行分類,若我們輸入帶有嚴(yán)重偏差的數(shù)據(jù)給計(jì)算機(jī),那么會(huì)導(dǎo)致模型出現(xiàn)很大的誤差。我們通常稱計(jì)算機(jī)對(duì)數(shù)據(jù)進(jìn)行了過(guò)度的學(xué)習(xí)而產(chǎn)生的狀態(tài)簡(jiǎn)稱為過(guò)擬合。
欠擬合
我們將計(jì)算機(jī)對(duì)數(shù)據(jù)進(jìn)行過(guò)度學(xué)習(xí)的學(xué)習(xí)狀態(tài)稱為過(guò)擬合,與之相對(duì),對(duì)于數(shù)據(jù)沒(méi)有得到充分學(xué)習(xí)的狀態(tài),我們稱為欠擬合。此外,我們還將過(guò)擬合問(wèn)題的模型稱為方差過(guò)高,產(chǎn)生欠擬合問(wèn)題的模型稱為偏置過(guò)高。