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