機器學習中比較重要的幾個概念


一、Python
1、Numpy
NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。

2、Pandas
pandas 是基於 Numpy 構建的含有更高級數據結構和工具的數據分析包類似於 Numpy 的核心是 ndarray,pandas 也是圍繞着 Series 和 DataFrame 兩個核心數據結構展開的 。Series 和 DataFrame 分別對應於一維的序列和二維的表結構。

3、Matplotlib
Matplotlib 可能是 Python 2D-繪圖領域使用最廣泛的套件。它能讓使用者很輕松地將數據圖形化,並且提供多樣化的輸出格式。

4、Sklearn
Sklearn是機器學習中一個常用的python第三方模塊,對一些常用的機器學習方法進行了封裝,在進行機器學習任務時,並不需要每個人都實現所有的算法,只需要簡單的調用sklearn里的模塊就可以實現大多數機器學習任務。
機器學習任務通常包括分類(Classification)和回歸(Regression),常用的分類器包括SVM、KNN、貝葉斯、線性回歸、邏輯回歸、決策樹、隨機森林、xgboost、GBDT、boosting、神經網絡NN。常見的降維方法包括TF-IDF、主題模型LDA、主成分分析PCA等等。

 

二、機器學習

1、one-hot
獨熱編碼即 One-Hot 編碼,又稱一位有效編碼,對於每一個特征,如果它有m個可能值,那么經過獨熱編碼后,就變成了m個二元特征。並且,這些特征互斥,每次只有一個激活。
直觀來說就是有多少個狀態就有多少比特,而且只有一個比特為1,其他全為0的一種碼制。

2、監督學習
訓練樣本數據中,每個樣本都帶有正確答案。
例如:預測數值型數據的回歸、預測分類標簽的分類、預測順序的排列。

3、無監督學習
訓練數據中,每個樣本都沒有正確答案。
例如:聚類(相似點)、異常檢測(異常點)。

4、N-gram
N-gram模型是一種語言模型(Language Model,LM),語言模型是一個基於概率的判別模型,它的輸入是一句話(單詞的順序序列),輸出是這句話的概率,即這些單詞的聯合概率(joint probability)。
例如:我說“上火”、“金罐”這兩個詞,你能想到的下一個詞應該更可能“加多寶”,而不是“可口可樂”。N-gram正是基於這樣的想法,它的第一個特點是某個詞的出現依賴於其他若干個詞,第二個特點是我們獲得的信息越多,預測越准確。
這就好像,我們每個人的大腦中都有一個N-gram模型,而且是在不斷完善和訓練的。我們的見識與經歷,都在豐富着我們的閱歷,增強着我們的聯想能力。

5、激活函數
它們將非線性特性引入到我們的網絡中。
舉例:如果不用激活函數,每一層輸出都是上層輸入的線性函數,無論神經網絡有多少層,輸出都是輸入的線性組合,這種情況就是最原始的感知機(Perceptron)。
如果使用的話,激活函數給神經元引入了非線性因素,使得神經網絡可以任意逼近任何非線性函數,這樣神經網絡就可以應用到眾多的非線性模型中。

6、Sigmoid函數(最常用的激活函數)
Sigmoid函數是一個在生物學中常見的S型函數,也稱為S型生長曲線。在信息科學中,由於其單增以及反函數單增等性質,Sigmoid函數常被用作神經網絡的閾值函數,將變量映射到[0,1]之間。

7、Softmax
或稱歸一化指數函數。他把一些輸入映射為0-1之間的實數,並且歸一化保證和為1,因此多分類的概率之和也剛好為1。
softmax由兩個單詞組成,其中一個是max,max即最大值;另一個單詞soft,即最后的輸出是每個分類被取到的概率。

8、歸一化
歸一化(標准化)方法有兩種形式,一種是把數變為(0,1)之間的小數,一種是把有量綱表達式變為無量綱表達式。主要是為了數據處理方便提出來的,把數據映射到0~1范圍之內處理。

模型歸一化后的好處:
  1、提升模型的收斂速度。
  2、提升模型的精度。

9、損失函數
損失函數的定義是什么:衡量模型模型預測的好壞。
在解釋下,損失函數就是用來表現預測與實際數據的差距程度。
例如:你做一個線性回歸,實際值和你的預測值肯定會有誤差,那么我們找到一個函數表達這個誤差就是損失函數。

10、梯度下降/上升
梯度下降是迭代法的一種,可以用於求解最小二乘問題(線性和非線性都可以)。在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降(Gradient Descent)是最常采用的方法之一,另一種常用的方法是最小二乘法。
在求解損失函數的最小值時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函數和模型參數值。反過來,如果我們需要求解損失函數的最大值,這時就需要用梯度上升法來迭代了。

11、學習率(Learning rate)
監督學習以及深度學習中重要的超參,其決定着目標函數能否收斂到局部最小值以及何時收斂到最小值。合適的學習率能夠使目標函數在合適的時間內收斂到局部最小值。
以梯度下降為例,為了使梯度下降法有較好的性能,我們需要把學習率的值設定在合適的范圍內。學習率決定了參數移動到最優值的速度快慢。如果學習率過大,很可能會越過最優值;反而如果學習率過小,優化的效率可能過低,長時間算法無法收斂。所以學習率對於算法性能的表現至關重要。

12、負采樣
自然語言處理領域中,判斷兩個單詞是不是一對上下文詞(context)與目標詞(target),如果是一對,則是正樣本,如果不是一對,則是負樣本。

13、哈夫曼樹
給定n個權值作為n個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(Huffman Tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。

14、MapReduce之Combiner
  1、Combiner是MR程序中Mapper和Reduce之外的一種組件。
  2、Combiner組件的父類就是Reducer。
  3、Combiner和Reducer之間的區別在於運行的位置。
  4、Reducer是每一個接收全局的MapTask 所輸出的結果。
  5、Combiner是在MapTask的節點中運行。
  6、每一個map都會產生大量的本地輸出,Combiner的作用就是對map輸出的結果先做一次合並,以較少的map和reduce節點中的數據傳輸量。
  7、Combiner的存在就是提高當前網絡IO傳輸的性能,也是MapReduce的一種優化手段。
  8、Combiner就是一次Reducer類中reduce方法的實現,所以這里的KV需要和Reducer的KV是一致的實際開發一定是先實現Mapper之后,知道了KV,然后再根據需要實現自定義的Combiner中的KV。

15、Hadoop之Shuffle過程
Shuffle過程是MapReduce的核心,描述着數據從map task輸出到reduce task輸入的這段過程。
Hadoop的集群環境,大部分的map task和reduce task是執行在不同的節點上的,那么reduce就要取map的輸出結果。那么集群中運行多個Job時,task的正常執行會對集群內部的網絡資源消耗嚴重。雖說這種消耗是正常的,是不可避免的,但是,我們可以采取措施盡可能的減少不必要的網絡資源消耗。另一方面,每個節點的內部,相比於內存,磁盤IO對Job完成時間的影響相當的大。

從以上分析,shuffle過程的基本要求:
  1、完整地從map task端拉取數據到reduce task端
  2、在拉取數據的過程中,盡可能地減少網絡資源的消耗
  3、盡可能地減少磁盤IO對task執行效率的影響

16、Word2vec中的CBOW與Skip-Gram模型
先驗概率:是指根據以往經驗和分析得到的概率,如全概率公式,它往往作為"由因求果"問題中的"因"出現的概率。
后驗概率:是指在得到“結果”的信息后重新修正的概率,是“執果尋因”問題中的"果"。

N-gram:
先驗概率和后驗概率已經知道了,但是一個句子很長,對每個詞進行概率計算會很麻煩,於是有了n-gram模型。
該模型基於這樣一種假設,第N個詞的出現只與前面N-1個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現概率的乘積。
一般情況下我們只計算一個單詞前后各兩個詞的概率,即n取2, 計算n-2,.n-1,n+1,n+2的概率。
如果n=3,計算效果會更好;n=4,計算量會變得很大。

Cbow:
cbow輸入是某一個特征詞的上下文相關的詞對應的詞向量,而輸出就是這特定的一個詞的詞向量,即先驗概率。
訓練的過程如下圖所示,主要有輸入層(input),映射層(projection)和輸出層(output)三個階段。

Skip-gram:
Skip-Gram模型和CBOW的思路是反着來的,即輸入是特定的一個詞的詞向量,而輸出是特定詞對應的上下文詞向量,即后驗概率。

17、Word2vec中的Negative Sampling模型
word2vec訓練方法和傳統的神經網絡有所區別,主要解決的是softmax計算量太大的問題,采用Hierarchical Softmax和Negative Sampling模型。
word2vec中cbow,skip-gram都是基於huffman樹然后進行訓練,左子樹為1右子樹為0,同時約定左子樹權重不小於右子樹。
其中,根節點的詞向量對應我們的投影后的詞向量,而所有葉子節點就類似於之前神經網絡softmax輸出層的神經元,葉子節點的個數就是詞匯表的大小。在霍夫曼樹中,隱藏層到輸出層的softmax映射不是一下子完成的,而是沿着霍夫曼樹一步步完成的,因此這種softmax取名為"Hierarchical Softmax"。

 

三、Spark
1、Sprak中的RDD
RDD(Resilient Distributed Dataset)叫做彈性分布式數據集,是Spark中最基本的數據抽象,它代表一個不可變、可分區、里面的元素可並行計算的集合。RDD具有數據流模型的特點:自動容錯、位置感知性調度和可伸縮性。RDD允許用戶在執行多個查詢時顯式地將工作集緩存在內存中,后續的查詢能夠重用工作集,這極大地提升了查詢速度。

2、RDD、DataFrame、Dataset的共性和區別:
共性:
  1、RDD、DataFrame、Dataset全都是spark平台下的分布式彈性數據集,為處理超大型數據提供便利
  2、三者都有惰性機制,在進行創建、轉換,如map方法時,不會立即執行,只有在遇到Action如foreach時,三者才會開始遍歷運算,極端情況下,如果代碼里面有創建、轉換,但是后面沒有在Action中使用對應的結果,在執行時會被直接跳過。
  3、三者都會根據spark的內存情況自動緩存運算,這樣即使數據量很大,也不用擔心會內存溢出
  4、三者都有partition的概念,這樣對每一個分區進行操作時,就跟在操作數組一樣,不但數據量比較小,而且可以方便的將map中的運算結果拿出來,如果直接用map,map中對外面的操作是無效的。
  5、三者有許多共同的函數,如filter,排序等
  6、在對DataFrame和Dataset進行操作許多操作都需要這個包進行支持
  7、DataFrame和Dataset均可使用模式匹配獲取各個字段的值和類型

區別:
RDD:
  1、RDD一般和spark mlib同時使用
  2、RDD不支持sparksql操作

DataFrame:
  1、與RDD和Dataset不同,DataFrame每一行的類型固定為Row,只有通過解析才能獲取各個字段的值。
  2、DataFrame與Dataset一般與spark ml同時使用
  3、DataFrame與Dataset均支持sparksql的操作,比如select,groupby之類,還能注冊臨時表/視窗,進行sql語句操作。
  4、DataFrame與Dataset支持一些特別方便的保存方式,比如保存成csv,可以帶上表頭,這樣每一列的字段名一目了然。

Dataset:
這里主要對比Dataset和DataFrame,因為Dataset和DataFrame擁有完全相同的成員函數,區別只是每一行的數據類型不同。
DataFrame也可以叫Dataset[Row],每一行的類型是Row,不解析,每一行究竟有哪些字段,各個字段又是什么類型都無從得知,只能用上面提到的getAS方法或者共性中的第七條提到的模式匹配拿出特定字段。而Dataset中,每一行是什么類型是不一定的,在自定義了case class之后可以很自由的獲得每一行的信息。

(待續整理)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM