產(chǎn)品都要懂:什么是程序?程序如何組裝成功能?服務(wù)端客戶端數(shù)據(jù)交互是咋樣的?數(shù)據(jù)庫是啥?里面的表、關(guān)系結(jié)構(gòu)、字段、字段類型是啥?常見的技術(shù)名詞如接口、同步異步、重構(gòu)等等又是指啥? 除了這些,數(shù)據(jù)產(chǎn)品還要懂?dāng)?shù)據(jù)相關(guān)的技術(shù),比如說數(shù)據(jù)倉庫,機器學(xué)習(xí)數(shù)據(jù)挖掘,大數(shù)據(jù)框架或者常用的數(shù)據(jù)開發(fā)工具hadoop、hive、spark等等這些。所以,從某些角度而言,數(shù)據(jù)產(chǎn)品比其他產(chǎn)品門檻要更高點。 本文主要梳理機器學(xué)習(xí)及常見算法。 一、什么是機器學(xué)習(xí)機器學(xué)習(xí)有下面幾種定義:
上述來自維基百科,有點晦澀。 機器學(xué)習(xí)是一種通過利用數(shù)據(jù),訓(xùn)練出模型,然后使用模型預(yù)測的一種方法。 其實這個過程,一個成語就可概括:舉一反三。 此處以高考為例,高考的題目在上考場前我們未必做過,但在高中三年我們做過很多很多題目,懂解題方法,因此考場上面對陌生問題也可以算出答案。 機器學(xué)習(xí)的思路也類似:我們能不能利用一些訓(xùn)練數(shù)據(jù)(已經(jīng)做過的題),使機器能夠利用它們(解題方法)分析未知數(shù)據(jù)(高考的題目)? 事實上,機器學(xué)習(xí)的一個主要目的,就是把人類思考歸納經(jīng)驗的過程,轉(zhuǎn)化為計算機通過對數(shù)據(jù)的處理計算得出模型的過程。 二、機器學(xué)習(xí)術(shù)語
特征和標簽,結(jié)合下面的內(nèi)容更好了解。 三、機器學(xué)習(xí)常見算法先說算法,其實算法是個很大的概念,除了機器學(xué)習(xí)算法,還有很多非機器學(xué)習(xí)算法,如編程里解決排序的快排、堆排、冒泡,也是算法。只是機器學(xué)習(xí)太火了,一提算法,多想到的是機器學(xué)習(xí)算法。 1. 決策樹決策樹,一種預(yù)測模型,代表的是對象屬性與對象值之間的一種映射關(guān)系。 一般來講通過學(xué)習(xí)樣本得到一個決策樹,這個決策樹能夠?qū)π碌臄?shù)據(jù)給出正確的分類。 這里舉一個簡單的例子:比如說,樣本數(shù)據(jù)為用戶的行為信息,同時已知每個用戶的分類信息,假設(shè)分類為流失用戶、非流失用戶。 然后我根據(jù)多個樣本數(shù)據(jù)訓(xùn)練出的多種多樣的模型,下面畫了一個簡單的決策模型,其中事件可以是:是否有過訂單,被贊次數(shù)超過5次等等這種(事件不是啥專有名詞哈,我這里是為了偷懶不去舉例,而用它代替)。 此外,為了驗證哪個模型更準,可以再用一組新的樣本數(shù)據(jù)作為測試數(shù)據(jù),套入模型,看看模型跑出的分類和實際分類誤差多少,從此來衡量模型的準確性。 這里引入一下訓(xùn)練樣本和測試樣本,很多訓(xùn)練過程都是這樣處理的,樣本數(shù)據(jù)劃分為訓(xùn)練樣本和測試樣本,訓(xùn)練樣本用來生成模型,測試樣本用來驗證準確性。 同時這里面的用戶的行為事件就是“特征”,分類(是否為流失用戶)就是“標簽”。 回顧一下:
至于模型是怎么訓(xùn)練生成的,具體算法啥樣,就不介紹了(其實是我也寫不清楚)。 決策樹在實際工作中基本應(yīng)用于給人群分類,最好的應(yīng)用場景是要把人群分類,并找到不同類別人群的不同特征,比如上面的例子,就可以做個流失模型,通過用戶的行為來提前找到哪些人有流失風(fēng)險,并通過專門優(yōu)惠等手段挽留。也可以發(fā)現(xiàn)哪些關(guān)鍵節(jié)點導(dǎo)致了流失,在這些節(jié)點上加一些運營策略來減少流失。 為了防止上圖誤導(dǎo)大家,找了其他的決策樹模型示例。 2. 回歸算法統(tǒng)計學(xué)來講,利用統(tǒng)計方法來建立一個表示變量之間相互關(guān)系的方程,這樣的統(tǒng)計方法被稱為回歸分析。 回歸算法就可以理解是研究不同變量相關(guān)關(guān)系的一個機器學(xué)習(xí)算法。多說一句,其實很多機器學(xué)習(xí)算法都是來自統(tǒng)計學(xué)。 回歸算法有兩個重要的子類:線性回歸和邏輯回歸。 線性回歸 這里從簡單線性回歸入手介紹,也就是我舉得例子只是研究兩個樣本變量之間的線性關(guān)系。 假設(shè)我們來研究考試成績和復(fù)習(xí)時間的關(guān)系,數(shù)據(jù)如下: 我想找出考試成績和復(fù)習(xí)時間的規(guī)律,怎么找呢? 這里就是擬合出一條直線,所以這條直線需要“穿過”所有的點,并且與各個點的距離盡可能的小。 解釋一下,簡單的線性回歸一般是使用“最小二乘法”來求解,最小二乘法的思想:假設(shè)我們擬合出的直線代表數(shù)據(jù)的真實值,而觀測到的數(shù)據(jù)代表擁有誤差的值。為了盡可能減小誤差的影響,需要求解一條直線使所有誤差的平方和最小。 假設(shè)擬合出的這條直線的函數(shù)如下: 學(xué)習(xí)成績 = a * 復(fù)習(xí)時間 b a、b都是直線的參數(shù)。獲得這些參數(shù)以后,我就可以計算出學(xué)生的成績。 這個結(jié)果可能和實際有些偏離,由于這條直線綜合考慮了大部分的情況,因此從“統(tǒng)計”意義上來說,這是一個最合理的預(yù)測。但是如果數(shù)據(jù)越多,模型就越能夠考慮到越多的情況,由此對于新情況的預(yù)測效果可能就越好。所以其實機器學(xué)習(xí)準不準,很大程度看你喂的數(shù)據(jù)夠不夠多。 邏輯回歸 邏輯回歸是一種與線性回歸非常類似的算法,屬于分類算法。 邏輯回歸只是對線性回歸的計算結(jié)果加上了個函數(shù)進行處理,將數(shù)值結(jié)果轉(zhuǎn)化為了0到1之間的概率,根據(jù)這個概率可以做預(yù)測,例如概率大于0.5,則腫瘤是否是惡性的等等。從直觀上來說,邏輯回歸是畫出了一條分類線,見下圖(也有劃出非線性分類線的邏輯回歸)。 假設(shè)我們有一組腫瘤患者的數(shù)據(jù),這些患者的腫瘤中有些是良性的(圖中的藍色點),有些是惡性的(圖中的紅色點)。這里腫瘤的紅藍色可以被稱作數(shù)據(jù)的 “標簽”。同時每個數(shù)據(jù)包括兩個“特征”:患者的年齡與腫瘤的大小。我們將這兩個特征與標簽映射到這個二維空間上,形成了我上圖的數(shù)據(jù)。 當(dāng)我有一個綠色的點時,該判斷這個腫瘤是惡性的還是良性的呢?根據(jù)紅藍點我們訓(xùn)練出了一個邏輯回歸模型,也就是圖中的分類線。這時,根據(jù)綠點出現(xiàn)在分類線的左側(cè),因此我們判斷它的標簽應(yīng)該是紅色,也就是說屬于惡性腫瘤。 3. 神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)算法是80年代機器學(xué)習(xí)界非常流行的算法,不過在90年代中途衰落?,F(xiàn)在,攜著“深度學(xué)習(xí)”之勢,神經(jīng)網(wǎng)絡(luò)重裝歸來,重新成為最強大的機器學(xué)習(xí)算法之一。 神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)機理就是分解與整合。 在這個網(wǎng)絡(luò)中,分成輸入層、隱藏層和輸出層。 輸入層負責(zé)接收信號,隱藏層負責(zé)對數(shù)據(jù)的分解與處理,最后的結(jié)果被整合到輸出層。 比方說,一個正方形,分解為四個折線進入視覺處理的下一層中。四個神經(jīng)元分別處理一個折線(每個處理單元事實上就是一個邏輯回歸模型,邏輯回歸模型接收上層的輸入,把模型的預(yù)測結(jié)果作為輸出傳輸?shù)较乱粋€層次)。 每個折線再繼續(xù)被分解為兩條直線,然后處理,再將每條直線再被分解為黑白兩個面處理。 整個過程就是一個復(fù)雜的圖像變成了大量的細節(jié)進入神經(jīng)元,神經(jīng)元處理以后再進行整合,最后得出了看到的是正方形的結(jié)論。 4. SVM(支持向量機)從某種意義上來說是邏輯回歸算法的強化:通過給予邏輯回歸算法更嚴格的優(yōu)化條件,支持向量機算法可以獲得比邏輯回歸更好的分類界線。但是如果沒有某類函數(shù)技術(shù),則支持向量機算法最多算是一種更好的線性分類技術(shù)。 5. 聚類算法聚類算法的目的則是通過訓(xùn)練,推測出這些數(shù)據(jù)的標簽。訓(xùn)練數(shù)據(jù)都是不含標簽的,算是典型的無監(jiān)督算法,后續(xù)會介紹有無監(jiān)督算法的區(qū)分。 讓我們還是拿一個二維的數(shù)據(jù)來說,某一個數(shù)據(jù)包含兩個特征。我希望通過聚類算法,給他們計算分類打上標簽,我該怎么做呢? 簡單來說,聚類算法就是計算種群中的距離,根據(jù)距離的遠近將數(shù)據(jù)劃分為多個族群。 聚類算法中最典型的代表就是K-Means算法 k-means聚類的目的是:把n個點(可以是樣本的一次觀察或一個實例)劃分到k個聚類中,使得每個點都屬于離他最近的均值(此即聚類中心)對應(yīng)的聚類,以之作為聚類的標準。 K-means常用的場景是在不清楚用戶有幾類時,嘗試性的將用戶進行分類,并根據(jù)每類用戶的不同特征,決定下步動作。(決策樹也可以做這件事,但需要先定義出特征,因此在探索特征未知的領(lǐng)域時,聚類可能更好用一些) 6. 降維算法也是一種無監(jiān)督學(xué)習(xí)算法,其主要特征是將數(shù)據(jù)從高維降低到低維層次。 例如,房價包含房子的長、寬、面積與房間數(shù)量四個特征,也就是維度為4維的數(shù)據(jù)??梢钥闯鰜?,長與寬事實上與面積表示的信息重疊了,例如面積=長 × 寬。通過降維算法我們就可以去除冗余信息,將特征減少為面積與房間數(shù)量兩個特征。 7. 推薦算法推薦系統(tǒng)中常用到的算法包括協(xié)同過濾算法(item_base,user_base)、用戶偏好算法、關(guān)聯(lián)規(guī)則算法、聚類算法、內(nèi)容相似性算法(content_base),以及一些其它的補充算法。 其中最有名的算法就是協(xié)同過濾算法,核心思想是物以類聚,人以群分。具體可以分為基于用戶的協(xié)同過濾算法和基于物品的協(xié)同過濾算法。 item_base是根據(jù)集體用戶行為算出物品間的相似度,然后把與用戶看過的物品或者購買過的物品最相似的物品推薦給該用戶。 user_base是根據(jù)集體行為計算用戶之間的相似度,比如A跟B計算出來非常相似,則可以把B喜歡的內(nèi)容,但A還沒有看過,推薦給A。 用戶偏好算法是根據(jù)用戶偏好算出來用戶感興趣的內(nèi)容/產(chǎn)品,然后推薦給用戶。 關(guān)聯(lián)規(guī)則算法是算出物品間的支持度和置信度。最常見的應(yīng)用是組合購買,啤酒和尿不濕是非常經(jīng)典的例子了。 聚類算法,可以對用戶進行聚類,也可以對產(chǎn)品進行聚類。聚類后可以針對大類進行推薦,或者繼續(xù)計算用戶類和產(chǎn)品類之間的關(guān)系。 content_base是根據(jù)物品本身的屬性進行關(guān)聯(lián)性運算,計算出物品間的相似性,最常見的應(yīng)用是同類推薦。 四、機器學(xué)習(xí)算法分類(監(jiān)督和無監(jiān)督區(qū)別)訓(xùn)練數(shù)據(jù)有標簽,則為監(jiān)督學(xué)習(xí)算法,沒標簽則為無監(jiān)督學(xué)習(xí)算法,推薦算法較為特殊,既不屬于監(jiān)督學(xué)習(xí),也不屬于非監(jiān)督學(xué)習(xí),是單獨的一類。 上述算法除了聚類、降維屬于無監(jiān)督學(xué)習(xí)算法,推薦是單獨一類,其余都是監(jiān)督學(xué)習(xí)算法。 其實還有半監(jiān)督學(xué)習(xí)算法,也就是訓(xùn)練數(shù)據(jù)部分有標簽,部分沒標簽。 總體來講,相對對于監(jiān)督學(xué)習(xí),無監(jiān)督學(xué)習(xí)如聚類算法效果差了些。但是監(jiān)督學(xué)習(xí)需要標簽,標簽?zāi)睦飦恚?在實際應(yīng)用中,標簽的獲取常常需要極大的人工工作量,有時甚至非常困難?,F(xiàn)在很多做大數(shù)據(jù)的會招人工來打標簽,制定打標規(guī)則啥的。 現(xiàn)在再看機器學(xué)習(xí)的概念,其實本質(zhì)就是找到特征和標簽間的關(guān)系。這樣當(dāng)有特征而無標簽的未知數(shù)據(jù)輸入時,我們就可以通過已有的關(guān)系得到未知數(shù)據(jù)標簽。 本文總算是進入尾聲,主要是分享自己平常的學(xué)習(xí)總結(jié),寫下來,一個是加深自己的理解,二是希望對和我一樣是算法門外漢但是又想了解學(xué)習(xí)的同學(xué)能夠有所幫助。不過這篇對于專門想做算法工程師的同學(xué)可能不太合適,還是要看專業(yè)的視頻經(jīng)典的書籍來學(xué)習(xí)。上述算法參考了很多大神的文章,能看的懂的,自己的理解就寫的多點,太晦澀的,就只是整理下來了。 寫這個數(shù)據(jù)產(chǎn)品技術(shù)知識系列也是有感自己當(dāng)初想要了解這些,網(wǎng)上沒找到針對產(chǎn)品來講的、系統(tǒng)一點、通俗一點的文章,很多時候是一個概念一個概念零散的去找。 |
|