機(jī)器學(xué)習(xí)中算法與模型的區(qū)別
機(jī)器學(xué)習(xí)中的“算法”是什么?
機(jī)器學(xué)習(xí)中的“算法”是在數(shù)據(jù)上運行以創(chuàng)建機(jī)器學(xué)習(xí)“模型”的過程。
機(jī)器學(xué)習(xí)算法執(zhí)行“模式識別”。算法從數(shù)據(jù)中“學(xué)習(xí)”,或者對數(shù)據(jù)集進(jìn)行“擬合”。
機(jī)器學(xué)習(xí)算法有很多。比如,我們有分類的算法,如 K- 近鄰算法;回歸的算法,如線性回歸;聚類的算法,如 K- 均值算法。
下面是機(jī)器學(xué)習(xí)算法的例子:
線性回歸 邏輯回歸 決策樹 人工神經(jīng)網(wǎng)絡(luò) K- 最近鄰 K- 均值
你可以把機(jī)器學(xué)習(xí)算法想象成計算機(jī)科學(xué)中的任何其他算法。
例如,你可能熟悉的一些其他類型的算法包括用于數(shù)據(jù)排序的冒泡排序和用于搜索的最佳優(yōu)先排序。
因此,機(jī)器學(xué)習(xí)算法具有許多特性:
機(jī)器學(xué)習(xí)計算法可以用數(shù)學(xué)和偽代碼來描述。 可以對機(jī)器學(xué)習(xí)算法的效率進(jìn)行分析和描述。 機(jī)器學(xué)習(xí)算法可以用任何一種現(xiàn)代編程語言來實現(xiàn)。
例如,你可能會在研究論文和教科書中看到用偽代碼或 線性代數(shù) 描述的機(jī)器學(xué)習(xí)算法。你可以看到一個特定的機(jī)器學(xué)習(xí)算法與另一個特性算法相比的計算效率。
學(xué)術(shù)界可以設(shè)計出全息你的機(jī)器學(xué)習(xí)算法,而機(jī)器學(xué)習(xí)實踐者可以在他們的項目中使用標(biāo)準(zhǔn)的機(jī)器學(xué)習(xí)算法。這就像計算機(jī)科學(xué)的其他領(lǐng)域一樣,學(xué)者可以設(shè)計出全新的排序算法,程序員可以在應(yīng)用程序中使用標(biāo)準(zhǔn)的排序算法。
你還可能會看到多個機(jī)器學(xué)習(xí)算法實現(xiàn),并在一個具有標(biāo)準(zhǔn) API 的庫中提供。一個流行的例子是 scikit-learn 庫,它在 Python 中提供了許多分類、回歸和聚類機(jī)器學(xué)習(xí)算法的實現(xiàn)。
機(jī)器學(xué)習(xí)中的“模型”是什么?
機(jī)器學(xué)習(xí)中的“模型”是運行在數(shù)據(jù)上的機(jī)器學(xué)習(xí)算法的輸出。
模型表示機(jī)器學(xué)習(xí)算法所學(xué)到的內(nèi)容。
模型是在訓(xùn)練數(shù)據(jù)上運行機(jī)器學(xué)習(xí)算法后保存的“東西”,它表示用于進(jìn)行預(yù)測所需的規(guī)則、數(shù)字和任何其他特定于算法的數(shù)據(jù)結(jié)構(gòu)。
我舉一些例子,可能會讓人更清楚地明白這一點:
線性回歸算法的結(jié)果是一個由具有特定值的稀疏向量組成的模型。 決策樹算法的結(jié)果是一個由具有特定值的 if-then 語句樹組成的模型。 神經(jīng)網(wǎng)絡(luò) / 反向傳播 / 梯度下降算法一起產(chǎn)生一個由具有特定值的向量或權(quán)重矩陣和特定值的圖結(jié)構(gòu)組成的模型。
機(jī)器學(xué)模型對于初學(xué)者來說更具挑戰(zhàn)性,因為它與計算機(jī)科學(xué)中的其他算法沒有明確的類比。
例如,排序算法的排序列表輸出并不是真正的模型。
最好的類比是將機(jī)器學(xué)習(xí)模型想象成一個“程序”。
機(jī)器學(xué)習(xí)模型“程序”由數(shù)據(jù)和利用數(shù)據(jù)進(jìn)行預(yù)測的過程組成。
例如,考慮線性回歸算法和由此產(chǎn)生的模型。該模型由系數(shù)(數(shù)據(jù))向量組成,這些系數(shù)(數(shù)據(jù))與作為輸入的一行新數(shù)據(jù)相乘并求和,以便進(jìn)行預(yù)測(預(yù)測過程)。
我們將數(shù)據(jù)保存為機(jī)器學(xué)習(xí)模型,以備后用。
我們經(jīng)常使用機(jī)器學(xué)習(xí)庫提供的機(jī)器學(xué)習(xí)模型的預(yù)測過程。有時候,我們可以自己實現(xiàn)預(yù)測過程作為我們應(yīng)用程序的一部分。考慮到大多數(shù)預(yù)測過程都非常簡單,這通常都是直截了當(dāng)?shù)摹?/p>
算法與模型框架
現(xiàn)在我們已經(jīng)熟悉了機(jī)器學(xué)習(xí)的“算法”和機(jī)器學(xué)習(xí)的“模型”。
具體來說,就是對數(shù)據(jù)運行算法來創(chuàng)建模型。
機(jī)器學(xué)習(xí) =>機(jī)器學(xué)習(xí)模型
我們還了解到,模型由數(shù)據(jù)和如何使用數(shù)據(jù)對新數(shù)據(jù)進(jìn)行預(yù)測的過程組成。如果你愿意的話,你也可以將這一過程視為一種預(yù)測算法。
機(jī)器學(xué)習(xí)模型 == 模型數(shù)據(jù) + 預(yù)測算法
這種區(qū)分對于理解廣泛的算法非常有幫助。
例如,大多數(shù)算法的所有工作都在“算法”中,而“預(yù)測算法”的工作很少。
通常情況下,算法是某種優(yōu)化程序,即在訓(xùn)練數(shù)據(jù)集上使模型(數(shù)據(jù) + 預(yù)測算法)的誤差最小化。線性回歸算法就是一個很好的例子。它執(zhí)行一個優(yōu)化過程(或用線性代數(shù)進(jìn)行分析求解),找到一組權(quán)重,使訓(xùn)練數(shù)據(jù)集上的誤差之和平方最小化。
線性回歸
算法:在訓(xùn)練數(shù)據(jù)集上找到誤差最小的系數(shù)集。 模型:
模型數(shù)據(jù):整個訓(xùn)練數(shù)據(jù)集。 預(yù)測算法:找出 K 個最相似的行,取其目標(biāo)變量的平均值。
有些算法很瑣碎,甚至什么都不做,所有的工作都在模型或預(yù)測算法中。
K- 最近鄰算法除了保存整個訓(xùn)練數(shù)據(jù)集外沒有其他的算法。因此,弄醒數(shù)據(jù)就是整個訓(xùn)練數(shù)據(jù)集,所有的工作都在預(yù)測算法中,即,一行新數(shù)據(jù)如何與保存的訓(xùn)練數(shù)據(jù)集交互以作出預(yù)測。
K- 最近鄰
算法:保存訓(xùn)練數(shù)據(jù)。 模型:
模型數(shù)據(jù):整個訓(xùn)練數(shù)據(jù)集。 預(yù)測過程:找出 K 個最相似的行,取其目標(biāo)變量的平均值。
你可以把這個分解作為一個框架來理解任何機(jī)器學(xué)習(xí)算法。
機(jī)器學(xué)習(xí)是自動編程
我們真的只是想要一個機(jī)器學(xué)習(xí)的“模型”,而“算法”就是我們獲得模型的路徑。
機(jī)器學(xué)習(xí)技術(shù)用于解決其他方法無法有效或高效解決的問題。
例如,如果我們需要將電子郵件分類為垃圾郵件或非垃圾郵件,我們需要一個軟件程序來完成此任務(wù)。
我們可以坐下來,手動查看大量的電子郵件,然后寫 if 語句來完成合格任務(wù)。人們已經(jīng)試過這個方法。事實證明,這種方法是緩慢的、脆弱的,而且效果也不是很好。
相反,我們可以使用機(jī)器學(xué)習(xí)技術(shù)來解決這個問題。具體來說,像 樸素貝葉斯(Naive Bayes)這樣的算法就可以從大量的歷史郵件樣本數(shù)據(jù)集中學(xué)習(xí)如何將郵件分類為垃圾郵件和非垃圾郵件。
我們不想要“樸素的貝葉斯”,我們想要樸素貝葉斯給出的模型,就是我們可以用來對郵件進(jìn)行分類的模型(概率向量和使用概率概率的預(yù)測算法)。我們想要的是模型,而不是用來創(chuàng)建模型的算法。
從這個意義上來說,機(jī)器學(xué)習(xí)模型是一個由機(jī)器學(xué)習(xí)算法自動編寫、或創(chuàng)建、或?qū)W習(xí)的程序,用來解決我們的問題。
作為開發(fā)人員,我們對人工智能意義上的機(jī)器學(xué)習(xí)算法的“學(xué)習(xí)”不太感興趣。我們并不關(guān)心模擬學(xué)習(xí)過程。有些人可能會關(guān)心,這很有趣,但這不是我們使用機(jī)器學(xué)習(xí)算法的原因。
相反,我們更看重的是機(jī)器學(xué)習(xí)算法提供的自動編程能力更感興趣。我們希望能夠有效地創(chuàng)建一個有效的模型,并將其融入到我們的軟件項目中。
機(jī)器學(xué)習(xí)算法執(zhí)行自動編程,而機(jī)器學(xué)習(xí)模型是為我們創(chuàng)建的程序。