神經網路能吊打其他演算法嗎?


顯然是xgboost,找到業務認可的標籤,從資料庫拉出來特徵,幾乎不用特徵工程,也不用調參,調包算就有還OK的效果....

這也導致演算法崗的可替代性非常強


在說最能打的演算法之前,我們先來簡單了解下,常見的機器學習演算法有哪些。

樸素貝葉斯分類

樸素貝葉斯分類是基於貝葉斯定理與特徵條件獨立假設的分類方法,發源於古典數學理論,擁有穩定的數學基礎和分類效率。它是一種十分簡單的分類演算法,當然簡單並不一定不好用。通過對給出的待分類項求解各項類別的出現概率大小,來判斷此待分類項屬於哪個類別,而在沒有多餘條件的情況下,樸素貝葉斯分類會選擇在已知條件下,概率最大的類別。

貝葉斯分類演算法的實質就是計算條件概率的公式。在事件 B 發生的條件下,事件 A 發生的概率為 P(A | B)來表示。

P(A | B)的概率為 P(A | B)=P(AB)/P(B),在日常應用中,我們經常可以直接得出 P(A | B),而 P(B | A)直接得到比較困難,通過貝葉斯定理就可以通過 P(A | B)獲得 P(B | A)。

而樸素貝葉斯分類的正式定義則如下:

1.設 x={a1,a2,……am} 為一個待分類項,而每個 a 為 x 的一個特徵屬性。

2.有類別集合C={y1,y2,……yn}

3.計算

4.如果

,則

樸素貝葉斯演算法在執行文本分類等工作是會有很好的效果,比如樸素貝葉斯演算法常被使用於垃圾郵件的過濾分類中。

SVM演算法

支持向量機(Support Vector Machine,常簡稱為 SVM)是一種監督式學習的方法,可廣泛地應用於統計分類以及回歸分析。支持向量機屬於一般化線性分類器,它能夠同時最小化經驗誤差與最大化幾何邊緣區,因此支持向量機也被稱為最大邊緣區分類器。

同時支持向量機將向量映射到一個更高維的空間里,在這個空間里建立有一個最大間隔超平面。在分開數據的超平面的兩邊建有兩個互相平行的超平面,分隔超平面使兩個平行超平面的距離最大化。假定平行超平面間的距離或差距越大,分類器的總誤差越小。

SVM 演算法雖然存在難以訓練和難以解釋的問題,但是在非線性可分問題上的表現十分優秀,在非線性可分問題中常選擇 SVM 演算法。

基於 KNN 的演算法

K - 近鄰演算法,簡稱 KNN(k-Nearest Neighbor),它同樣是一個比較簡單的分類、預測演算法。對選取與待分類、待預測數據的最相似的 K 個訓練數據,通過對這 K 個數據的結果或者分類標號取平均、取眾數等方法得到待分類、待預測數據的結果或者分類標號。

K - 近鄰演算法如上圖所示,有兩類不同的樣本數據,分別用藍色的小正方形和紅色的小三角形表示,而圖正中間的那個綠色的圓所標示的數據則是待分類的數據。在不知道中間那個綠色的數據是從屬於哪一類(藍色小正方形or紅色小三角形)的情況下,我們可以從它的臨近的樣本進行判斷。

如果 K=3,綠色圓點最近的 3 個鄰居是 2 個紅色小三角形和 1 個藍色小正方形,少數從屬於多數,基於統計的方法,判定綠色的這個待分類點屬於紅色的三角形一類。

如果 K=5,綠色圓點的最近的 5 個鄰居是 2 個紅色三角形和 3 個藍色的正方形,還是少數從屬於多數,基於統計的方法,判定綠色的這個待分類點屬於藍色的正方形一類。

從上文我們看到,當無法判定當前待分類點是從屬於已知分類中的哪一類時,可以依據統計學的理論看它所處的位置特徵,衡量它周圍鄰居的權重,而把它歸為(或分配)到權重更大的那一類,這就是 K 近鄰演算法的核心思想。

KNN 演算法相比其他演算法也更加簡單,並且易於理解、實現,無需估計參數與訓練。適合對稀有事件進行分類和多分類方面的問題,在這類問題方面 KNN 演算法的表現比 SVM 更好。

人工神經網路演算法

人工神經網路,簡稱神經網路或類神經網路,是一種模仿生物神經網路結構和功能的數學模型或計算模型,用於對函數進行估計或近似。神經網路由大量的人工神經元聯結進行計算。大多數情況下人工神經網路能在外界信息的基礎上改變內部結構,是一種自適應系統。

下圖為人工神經網路示意圖,人工神經網路由很多的層組成,最前面這一層叫輸入層,最後面一層叫輸出層,最中間的層叫隱層,並且每一層有很多節點,節點之間有邊相連的,每條邊都有一個權重。對於文本來說輸入值是每一個字元,對於圖片來說輸入值就是每一個像素。

人工神經網路是如何工作的?

1.前向傳播:對於一個輸入值,將前一層的輸出與 後一層的權值進行運算,再加上後一層的偏置值得到了後一層的輸出值,再將後一層的輸出值作為新的輸入值傳到再後面一層,一層層傳下去得到最終的輸出值。

2.反向傳播:前向傳播會得到預測值,但是這個預測值不一定是真實的值,反向傳播的作用就是修正誤差,通過與真實值做對比修正前向傳播的權值和偏置。

人工神經網路在語音、圖片、視頻、遊戲等各類應用場景展現出了優異的性能,但是存在需要大量的數據進行訓練來提高準確性的問題。

看完這些,其實就能發現機器學習能打的演算法有很多,只是各自擅長的場景各不相同。像樸素貝葉斯分類演算法在執行文本分類等工作是會有很好的效果,常用於垃圾郵件的過濾過濾。而很多同學提及的人工神經網路演算法,在圖片識別、視頻等場景有其它演算法難以企及的優異性。

又拍雲內容識別使用的就是人工神經網路,配合人工標註,加上大量的數據訓練,在測試中表現出了識別迅速、準確率高的特性,目前又拍雲內容識別應用於色情識別的正確率高達 99.7%。

內容識別平台架構

最後放個小福利:

又拍雲圖像識別服務推出永久免費套餐,提供總量 2000 次 / 天的圖片檢測,等效於 2000 條 / 天的文本鑒別,或 120 分鐘 / 天的視頻點播與視頻直播檢測。有需要的小夥伴可以點擊下方鏈接免費使用哦

免費!2000 次/天的的圖片內容識別服務?

www.upyun.com


我可以跑出來說線性回歸嗎


通常,應該首先分析數據的特點,然後選擇合適的方法。一種機器學習方法,很難在所有數據上的效果都好。

例如,在數據雜訊較強的情況下,可以考慮殘差收縮網路:

殘差收縮網路

如上圖所示,殘差收縮網路在其內部包含了軟閾值化,是其適合強噪數據的主要原因。

M. Zhao, S. Zhong, X. Fu, B. Tang, M. Pecht, Deep residual shrinkage networks for fault diagnosis, IEEE Transactions on Industrial Informatics, vol. 16, no. 7, pp. 4681-4690, 2020.

Deep Residual Shrinkage Networks for Fault Diagnosis?

ieeexplore.ieee.org

Hi-202020:深度殘差收縮網路:從刪除冗餘特徵的靈活度進行探討?

zhuanlan.zhihu.com圖標Hi-202020:深度殘差收縮網路:一種面向強雜訊數據的深度學習方法?

zhuanlan.zhihu.com圖標


1-線性回歸

線性回歸可能是統計學和機器學習中最知名和最易理解的演算法之一。

由於預測建模主要關注最小化模型的誤差,或者以可解釋性為代價來做出最準確的預測。 我們會從許多不同領域借用、重用和盜用演算法,其中涉及一些統計學知識。

線性回歸用一個等式表示,通過找到輸入變數的特定權重(B),來描述輸入變數(x)與輸出變數(y)之間的線性關係。

Linear Regression

舉例:y = B0 + B1 * x

給定輸入x,我們將預測y,線性回歸學習演算法的目標是找到係數B0和B1的值。

可以使用不同的技術從數據中學習線性回歸模型,例如用於普通最小二乘和梯度下降優化的線性代數解。

線性回歸已經存在了200多年,並且已經進行了廣泛的研究。 如果可能的話,使用這種技術時的一些經驗法則是去除非常相似(相關)的變數並從數據中移除雜訊。 這是一種快速簡單的技術和良好的第一種演算法。

2-邏輯回歸

邏輯回歸是機器學習從統計領域借鑒的另一種技術。 這是二分類問題的專用方法(兩個類值的問題)。

邏輯回歸與線性回歸類似,這是因為兩者的目標都是找出每個輸入變數的權重值。 與線性回歸不同的是,輸出的預測值得使用稱為邏輯函數的非線性函數進行變換。

邏輯函數看起來像一個大S,並能將任何值轉換為0到1的範圍內。這很有用,因為我們可以將相應規則應用於邏輯函數的輸出上,把值分類為0和1(例如,如果IF小於0.5,那麼 輸出1)並預測類別值。

Logistic Regression

由於模型的特有學習方式,通過邏輯回歸所做的預測也可以用於計算屬於類0或類1的概率。這對於需要給出許多基本原理的問題十分有用。

與線性回歸一樣,當你移除與輸出變數無關的屬性以及彼此非常相似(相關)的屬性時,邏輯回歸確實會更好。 這是一個快速學習和有效處理二元分類問題的模型。

3-線性判別分析

傳統的邏輯回歸僅限於二分類問題。 如果你有兩個以上的類,那麼線性判別數據分析演算法(Linear Discriminant Analysis,簡稱LDA)是首選的線性分類技術。

LDA的表示非常簡單。 它由你的數據的統計屬性組成,根據每個類別進行計算。 對於單個輸入變數,這包括:

1.每類的平均值。

2.跨所有類別計算的方差。

Linear Discriminant Analysis

LDA通過計算每個類的判別值並對具有最大值的類進行預測來進行。該技術假定數據具有高斯分布(鐘形曲線),因此最好先手動從數據中移除異常值。這是分類預測建模問題中的一種簡單而強大的方法。

4-分類和回歸樹

決策樹是機器學習的一種重要演算法。

決策樹模型可用二叉樹表示。對,就是來自演算法和數據結構的二叉樹,沒什麼特別。 每個節點代表單個輸入變數(x)和該變數上的左右孩子(假定變數是數字)。

Decision Tree

樹的葉節點包含用於進行預測的輸出變數(y)。 預測是通過遍歷樹進行的,當達到某一葉節點時停止,並輸出該葉節點的類值。

決策樹學習速度快,預測速度快。 對於許多問題也經常預測準確,並且你不需要為數據做任何特殊準備。

5-樸素貝葉斯

樸素貝葉斯是一種簡單但極為強大的預測建模演算法。

該模型由兩種類型的概率組成,可以直接從你的訓練數據中計算出來:1)每個類別的概率; 2)給定的每個x值的類別的條件概率。 一旦計算出來,概率模型就可以用於使用貝葉斯定理對新數據進行預測。 當你的數據是數值時,通常假設高斯分布(鐘形曲線),以便可以輕鬆估計這些概率。

Bayes Theorem

樸素貝葉斯被稱為樸素的原因,在於它假設每個輸入變數是獨立的。 這是一個強硬的假設,對於真實數據來說是不切實際的,但該技術對於大範圍內的複雜問題仍非常有效。

6-K近鄰

KNN演算法非常簡單而且非常有效。 KNN的模型用整個訓練數據集表示。 是不是特簡單?

通過搜索整個訓練集內K個最相似的實例(鄰居),並對這些K個實例的輸出變數進行匯總,來預測新的數據點。 對於回歸問題,新的點可能是平均輸出變數,對於分類問題,新的點可能是眾數類別值。

成功的訣竅在於如何確定數據實例之間的相似性。如果你的屬性都是相同的比例,最簡單的方法就是使用歐幾里德距離,它可以根據每個輸入變數之間的差直接計算。

K-Nearest Neighbors

KNN可能需要大量的內存或空間來存儲所有的數據,但只有在需要預測時才會執行計算(或學習)。 你還可以隨時更新和管理你的訓練集,以保持預測的準確性。

距離或緊密度的概念可能會在高維環境(大量輸入變數)下崩潰,這會對演算法造成負面影響。這類事件被稱為維度詛咒。它也暗示了你應該只使用那些與預測輸出變數最相關的輸入變數。

7-學習矢量量化

K-近鄰的缺點是你需要維持整個訓練數據集。 學習矢量量化演算法(或簡稱LVQ)是一種人工神經網路演算法,允許你掛起任意個訓練實例並準確學習他們。

Learning Vector Quantization

LVQ用codebook向量的集合表示。開始時隨機選擇向量,然後多次迭代,適應訓練數據集。 在學習之後,codebook向量可以像K-近鄰那樣用來預測。 通過計算每個codebook向量與新數據實例之間的距離來找到最相似的鄰居(最佳匹配),然後返回最佳匹配單元的類別值或在回歸情況下的實際值作為預測。 如果你把數據限制在相同範圍(如0到1之間),則可以獲得最佳結果。

如果你發現KNN在您的數據集上給出了很好的結果,請嘗試使用LVQ來減少存儲整個訓練數據集的內存要求。

8-支持向量機

支持向量機也許是最受歡迎和討論的機器學習演算法之一。

超平面是分割輸入變數空間的線。 在SVM中,會選出一個超平面以將輸入變數空間中的點按其類別(0類或1類)進行分離。在二維空間中可以將其視為一條線,所有的輸入點都可以被這條線完全分開。 SVM學習演算法就是要找到能讓超平面對類別有最佳分離的係數。

Support Vector Machine

超平面和最近的數據點之間的距離被稱為邊界,有最大邊界的超平面是最佳之選。同時,只有這些離得近的數據點才和超平面的定義和分類器的構造有關,這些點被稱為支持向量,他們支持或定義超平面。在具體實踐中,我們會用到優化演算法來找到能最大化邊界的係數值。

SVM可能是最強大的即用分類器之一,在你的數據集上值得一試。

9-bagging和隨機森林

隨機森林是最流行和最強大的機器學習演算法之一。 它是一種被稱為Bootstrap Aggregation或Bagging的集成機器學習演算法。

bootstrap是一種強大的統計方法,用於從數據樣本中估計某一數量,例如平均值。 它會抽取大量樣本數據,計算平均值,然後平均所有平均值,以便更準確地估算真實平均值。

在bagging中用到了相同的方法,但最常用到的是決策樹,而不是估計整個統計模型。它會訓練數據進行多重抽樣,然後為每個數據樣本構建模型。當你需要對新數據進行預測時,每個模型都會進行預測,並對預測結果進行平均,以更好地估計真實的輸出值。

Random Forest

隨機森林是對決策樹的一種調整,相對於選擇最佳分割點,隨機森林通過引入隨機性來實現次優分割。

因此,為每個數據樣本創建的模型之間的差異性會更大,但就自身意義來說依然準確無誤。結合預測結果可以更好地估計正確的潛在輸出值。

如果你使用高方差演算法(如決策樹)獲得良好結果,那麼加上這個演算法後效果會更好。

10-Boosting和AdaBoost

Boosting是一種從一些弱分類器中創建一個強分類器的集成技術。 它先由訓練數據構建一個模型,然後創建第二個模型來嘗試糾正第一個模型的錯誤。 不斷添加模型,直到訓練集完美預測或已經添加到數量上限。

AdaBoost是為二分類開發的第一個真正成功的Boosting演算法,同時也是理解Boosting的最佳起點。 目前基於AdaBoost而構建的演算法中最著名的就是隨機梯度boosting。

AdaBoost

AdaBoost常與短決策樹一起使用。 在創建第一棵樹之後,每個訓練實例在樹上的性能都決定了下一棵樹需要在這個訓練實例上投入多少關注。難以預測的訓練數據會被賦予更多的權重,而易於預測的實例被賦予更少的權重。 模型按順序依次創建,每個模型的更新都會影響序列中下一棵樹的學習效果。在建完所有樹之後,演算法對新數據進行預測,並且通過訓練數據的準確程度來加權每棵樹的性能。

因為演算法極為注重錯誤糾正,所以一個沒有異常值的整潔數據十分重要。

寫在最後

初學者在面對各種各樣的機器學習演算法時提出的一個典型問題是「我應該使用哪種演算法?」問題的答案取決於許多因素,其中包括:(1)數據的大小,質量和性質; (2)可用的計算時間; (3)任務的緊迫性; 和(4)你想要對數據做什麼。

如果對於深度學習很感興趣,那就要多去做實驗,裡面包含了很多機器學習的演算法,對於做實驗用的GPU,要是自己沒有可以在智星雲租用,我們現在就是在智星雲租用的,環境都是配置好的,性價比很高。


推薦閱讀:
相关文章