《機器學習:實用案例解析》,讀書筆記


第1章:數據處理技巧

案例1:
  • 數據:6,0000條不明飛行物(UFO)的目擊紀錄和報道。主要目擊紀錄發生在美國。
  • 問題:面對這份數據的時空維度,我們可能會有以下疑問:UFO的出現是否有周期性規律?美國的不同州出現的UFO記錄如果有區別,有哪些區別?

  • 主要內容:
    1. 日期的處理
    2. 字符串地名的處理

  • 主要函數:
#讀入“\t”制表符數據,並設置列名稱
read.delim(" ", sep="\t", stringAsFactors=FALSE, header=FALSE, na.string="")
names()

#處理畸形數據(直接刪除),並轉化日期字符串
nchar()——字符串長度
as.Date(data,format=“%Y%m%d”)

#地點數據(空間維度)
tryCatch()——拋出異常
strsplit()——
gsub()——移除字符串開頭空格?
lapply(<vector>,<func>)——list-apply函數(應用后返回list鏈表),對每一行做操作
do.call(<func=rbind>,<list>)——把列表的一行一行執行rbind, 列表轉換成矩陣,一般和lapply連用
transform()——
tolower()——
match(x,ref)——兩個向量x和ref,x是待匹配的向量,ref是匹配向量,函數返回與x長度相同的向量,如果在ref中未找到匹配項,則默認返回NA
subset()——提取數據

#統計每個州每年月的數據來觀察周期性
summary()——
ggplot()——
ggsave(<plot>,<filenmame>)
print()

#數據聚合
seq.date(from,to,by="month")——創建日期時間序列
ddply(data,.(x1,x2) ,nrow)——以行為單位
strftime(date.range,format="%Y-%m")——把日期對象轉換成一個“YYYY-MM”格式的字符串
merge(data1,data2,by.x,by.y,all=TRUE)

第2章:數據分析

數據處理:數據分析和驗證
1、數據分析
  • 方法:用摘要表和基本可視化方法從數據中尋找隱含的模式

  • 數值摘要:均值、眾數、百分位數和中位數、標准差和方差
  • 可視化方法:直方圖、和密度估計和散點圖
2、數據驗證
  • 方法:交叉驗證和假設檢驗

  • 交叉驗證:用另一批數據來測試在原數據集上發現的模式
  • 假設檢驗:利用概率論來測試原始數據集上發現的模式是否是巧合

1、數據:

知道數據由何而來是區別因果關系和相關關系的唯一方法(從實驗中得到,還是因沒有實驗數據而直接觀察記錄而來的)

  • 數值摘要
對象:每列數據

  • 可視化摘要
對象:每列數據

  • 相關性
對象:兩列數據

  • 降維:
對象:多列數據轉換為少數列

比較:
摘要統計描述的是所有數據在某一列(屬性)上的特點;
降維:把數據集中所有列轉換成少數幾列,得到的列數據每一行都是唯一的。

2、推斷數據類型


虛擬變量編碼dummy coding:用0和1對一個對象的定性屬性進行描述。

3、數值摘要表

  • 集中趨勢
mean——均值
median——中位數
min——最小值
max——最大值
range——取值范圍
quantile(data,prob=seq(0,1,by=0.20))——分位數
  • 散步程度
var——樣本方差,除數為n-1,原因:經驗估算的方差會由於一些細微原因比其真值要略小
sd——樣本標准差

注:摘要表中未提到的 眾數可視化方法的 密度曲線圖峰值更易解釋

通過 摘要表了解數據的集中程度方法是對比標准差和分位數的范圍

4、可視化分析數據

ggplot()學習!
  • 單列可視化:側重數據的形狀(直方圖,密度曲線)
  • 雙列可視化:側重兩列之間的關系(散點圖)
  • 幾種標准數據形狀(分布)

4.1直方圖

嘗試不同的 區間寬度來檢驗是否存在假象
  • 過平滑oversmoothing:區間寬度值大,只能看到個頂峰,對稱性消失
  • 欠平滑undersmoothing:區間寬度值小

4.2核密度估計(Kernel Density Estimate,KDE)

密度曲線圖:美觀且在大數據集上更接近理論形狀,有助於發現數據的模式類型。

1)期望的峰值不平坦,數據集在峰值處還隱藏着更多的結構,可以嘗試 將其中任意一個定性變量將曲線分開
按性別區分,發現有兩個隱藏的鍾形曲線!

這里每一個正態分布叫一個分片(facet)

2)正態分布:(高斯分布或鍾形曲線)
特點:
分布的均值: 決定鍾形曲線的中心所在
分布的方差: 決定鍾形曲線的寬度
均值和中位數是相等的,且大部分數據不偏離均值超過3個標准差的數值。

注:不是所有事物都符合正態分布:比如人們的年收入、股價每日的漲跌
3)眾數:密度曲線的峰值處

4)分布分類
分類1:
  • 單峰unimodal:只有1個眾數的分布
  • 雙峰bimodal:有2個眾數的分布
  • 多峰multimodal:有兩個以上的眾數的分布
分類2:
  • 對稱分布symmetric:左右兩邊形狀一樣,小於眾數的數據和大於眾數的數據的可能性是一樣的。正態分布就有這個特點
  • 偏態分布skewed:
伽馬分布gamma distribution:圖形向右偏斜,眾數右側觀察到極值的可能性要大於其左側
指數分布exponential distribution
分類3:
  • 窄尾分布thin tailed:數值都在均值附近(99%可能性,3個標准內)正態分布
  • 重尾分布heavy tailed:
柯西分布Cauchy distribution(90%在3個標准內,仍有5%可能性在6個標准值外)

比較1:
  • 正態分布:單峰的、對稱的,鍾形的窄尾分布
  • 柯西分布:單峰的、對稱的,鍾形的重尾分布

比較2:
  • 伽瑪分布:只有正值(>0)
  • 指數分布:眾數出現在0值處,數據集中頻數最高的是0,並且只有非負值(>=0)

4.3散點圖——列相關的可視化

第3章:分類

分類問題:“決策邊界”
非線性分類:核方法,處理效果不錯,並且幾乎不增加多余計算成本

案例2:
分類判斷郵件(純文本格式的原始郵件內容)是否為垃圾郵件
文件標記為3類: 垃圾郵件spam、易識別的正常郵件easy ham、不易識別的正常郵件hard ham。

1、特征提取:詞頻word count(“html”和”table“)、偽造的頭部信息、IP地址以及黑名單等


2、文本處理:
以下散點圖會發現,有多處散點重疊的線性
標准的圖形化處理方法:在繪圖之前給這些值 增加隨機噪聲(抖動jittering)


  • 主要函數
tm包文本挖掘一系列函數
file(path,open="rt",encoding="latin1")——open="rt"以文本形式讀取
readLines(<file>)——按行數據讀取
close(<file>)——

dir()——讀取目錄中文件名

3、建模
訓練集:垃圾郵件取500,易識別郵件500件
特征:統計詞頻、詞的概率,該詞在文本目錄下所有文件出現的概率
沒在訓練集中出現的詞頻設為為較小的概率值0.0001%

總而言之就是概率判斷!寫得真難懂!
朴素貝葉斯分類具體參看這個: 朴素貝葉斯分類器的應用

第5章 回歸模型

1、基准模型:最簡單的預測方法就是忽略輸入,然后將過去輸出值的均值作為預測結果。

2、線性回歸模型所做的兩個假設:
  • 可分性\可加性:變量之間的相互作用
  • 單調性\線性:線性比單調性更具約束力

3、 線性回歸的一般性系統問題:回歸擅長內推插值(interpolation),卻不擅長外推歸納。
當輸入數據偏離既有輸入觀測數據時,預測模型一般不擅長預測其輸出結果。

4、殘差:(預測直線所不能解釋的)誤差。一個模型應該盡可能提取較多信號,並把噪聲分開。 盡量使殘差中不存在結構。

5、衡量預測質量的指標:
  • 誤差平方:
缺點:取值與樣本量n有關,隨着數據集的增大而增大
  • 均方誤差(Mean Squared Errer,MSE):平方誤差的均值
缺點:平均偏離誤差數是呈x^2平方增長
  • 均方根誤差(Root Mean Squared Error,RMSE)
缺點:取值范圍為無窮,不能直觀的看出模型的質量
  • 擬合優度 r2=r2xy(SST=Syy):


         在線性回歸模型中,使用R2,從公式(1-模型.RMSE/均值.RMSE)可以解釋R2 比較模型結果與假設只用均值作為預測結果的好壞。取值范圍為[0,1],若不如均值好,則為0;若對每個數據都做出完美解釋則為1.



案例3:
預測互聯網上排名前1000的網站在2011年的訪問量。
其中特征變量中有因子x.f也有連續變量x.c,輸出y是連續變量

  • 有關y~x.c(連續型輸入)的分析:
先畫散點圖,發現由於數值跨度的刻度值過大,使得主要數據點趨向於彼此距離很近,無法將其分開。

再畫密度圖:和散點圖一樣無法理解。

尺度變換(取log) :當看到沒有意義的密度圖時,嘗試對分析的數值取log(注:此圖不必擔心對0取log的錯誤!數值不會取0) 對數螺旋曲線P126第4章

建模:lm()
評估:summary():詳細解釋!
1、殘差的分位數
2、coef()函數:
Std Error,t-value,p-value等用於評估估計參數結果的不確定性,即估計參數的置信度。t-value,p-value用於衡量對真實系數不為0有多大的信心。

一個傳統的確定輸入、輸出 相關的方法是:為這個輸入找到一個距離0至少為2個標准之外的系數(估計系數/Std.Error=t-value個標准之外)

3、Residual Standard Error是RMSE值,degree of freedom是自由度=數據點個數-系數個數。當數據較少而是用的系數過多就是一種過擬合
4、R 2指明數據中存在的變化有多少已經被模型所解釋。在Multiple R-squared中,系數越多,就會得到越大的懲罰。
5、F-statistic解釋它在未知數據上的預測能力,並不是模型在用於擬合數據上的效果

  • 有關y於因子輸入
因子的取值情況將作為線性模型截距的一部分

如果特征變量的單獨模型的R 2解釋能力較小,可以去掉而獲取更具預測能力的輸入模型。

相關性cor():相關並非因果。

第6章交叉驗證和正則化

Generalized Additive Model(GAM)廣義加性模型
(kernel trick)核方法基本思想是:將非線性問題轉換為線性問題。
一個好的模型至少能解釋90%的數據,R 2大於90%

多項式回歸:
  • 奇異點問題:過多的增加高次項會導致與低次項之間太相關(多重共線!)以至不正常擬合,會在系數中出現NA值以及沒有*標的問題(奇異點問題)無法為每個特征找到合適的權重系數。
  • 過擬合問題:此時手動添加 (X^2) 不如用poly(x,degree=n)函數。因為它產生的是正交(不相關)多項式,但是高次項過多會導致過擬合問題。
解決方法:交叉驗證和正則化
  • 交叉驗證的核心思想:把數據集分為訓練集和測試集,訓練集(80%)建模,測試集(20%)對模型進行檢驗,用RMSE來度量效果。
  • 正則化:“讓模型盡量擬合訓練數據”與“讓模型盡量保持簡單“之間做出權衡
一個模型的簡單與復雜可以通過模型的多項式的次數和 特征變量的權重大小來衡量,權重越大模型越復雜。
L2 正則化(L2 norm) :特征 權重的平方 的累加
L1正則化(L1 norm):特征 權重的絕對值的累加。( 懲罰較強
通過交叉驗證來校正正則化算法。
比較:
  • 過擬合:隨着次數不斷增加,訓練誤差和測試誤差變化趨勢開始不一致了,即訓練誤差持續變小,而測試誤差開始變大。
  • 欠擬合:模型過於簡單以致訓練集都擬合不好

正則化操作過程:
訓練正則化的線性模型的函數glmnet():執行結果的行數越前正則化越強。其輸出結果的意義是:
1)DF是指明非0權重個數,但不包括截距項。可以認為 大部分輸入特征的權重為0時,這個模型就是稀疏的(sparse)。
2)%Dev就是模型的R 2
3)超參數(lambda)是正則化參數。lambda越大,說明越在意模型的復雜度,其懲罰越大,使得模型所有權重趨向於0。
模型最終lambda取值的選擇:可以 通過交叉驗證,通過輸入glmnet中得到的不同lambda值, 用測試集驗證效果好壞(RMSE評估)


案例4:文本回歸
根據O‘Reilly出版社的銷售前100的暢銷書的逢低描述文本來預測它們的相對流行程度。
特征變量:某些單詞的詞頻
做回歸,發現lambda圖效果不好,(隨着lambda變大,模型越來越好,但是這種情況說明模型簡化到了一個常數模型不變了!)

將目標改為:預測它們是否進入排名前50的而分類問題
方法:logstic回歸
inv.logit()—— 預測值y的反logit,boot包的函數
線性回歸服從高斯分布,logistic回歸服從二項分布
評估:錯誤率

第7章 優化模型

從數據中擬合一個模型可看作是優化問題(optimization)
優化問題(分2步):
step1、為模型設定一個度量標准(線性回歸就是RMSE,但是分母不變,可直接計算累加的平方誤差,以節省運算時間)
step2、選擇最優參數a、b取值
  • 方法1:網格搜索(gird search):枚舉,但是耗時,並且可能會出現維度災難(特征變量取值個數的乘積)
  • 方法2:優化算法optim函數(主要用於非線性的優化求解,線性回歸的最小二乘算法與optim計算結果接近)

optim(c(0,0),<func>)——優化問題函數,c(0,0)是優化函數參數的初始值, 返回值par是參數最優點值,value是參數的最優點時平方誤差值,counts是返回執行輸入函數func的次數以及梯度gradient的次數,convergence值為0表示有把握找到最優點,非0值時對應錯誤,message是一些其它信息。
curve(sapply(x,<func>),<from>,<to>)——畫曲線圖,from和to設置橫坐標取值范圍

嶺回歸
嶺回歸與普通最小二乘法的唯一區別是: 改變了誤差函數,即嶺回歸把回歸系數的本身當作誤差項的一部分,這促使回歸系數表小。

誤差函數若是改用絕對值,由於絕對值誤差曲線要比平方誤差或嶺誤差曲線鋒利的多,無法根據斜率的變化通過optim()找到前進的方向來確定全局最優點。如下所示:

案例5:密碼破譯優化問題
僅通過一段密文( 凱撒密碼 ),確定這段密文對應的原文是標准的英語,該如何解碼它

破解替換密碼:
1、為每一種解密規則定義一個解密效果度量
2、定義一個基於目前已知的解密效果最優的解密規則的算法,對它進行隨機修改來生成一個新的解密規則
3、定義一個算法,可以遞進地生成破譯效果逐漸變好的解密規則。
利用一個詞典數據庫來計算任何一串字符串是一個真正英文單詞的概率。(由一串高概率單詞組成的文本串更可能是真正的英文)

處理不存在的單詞:因為它們的概率是0,去一個接近0的值
打分(1):找到兩個解密串中每個單詞的概率,再把它們連乘起來得到整個解密串的概率,根據概率高低來衡量2種解密規則的優劣。

替換密碼(2):有解密規則生成新解密規則的算法最終歸結為交換兩個字母的現有規則
  • 方法1:貪心憂化——只接受使解密串概率變高的新解密規則
  • 方法2:
1、解密規則B的解密串概率大於A,則替換A
2、 解密規則B的解密串概率小於A,則以P(B)/P(A)的概率替換A
處理最終 概率 接近0值的方法是去對數在乘積

比較(3):由於概率高的解密規則問題不具有連續性,不能用optim函數優化來解決,就選用 Metropolis方法

機器學習算法都可以看作是最小化某種預測誤差的優化問題。
但是有些問題無法通過optim函數的標准優化算法(梯度下降)解決,其它優化算法有:
隨機優化算法,比如:
  • 模擬退火(隨着循環次數的增多,越來越不能接受沒有變好的規則,即越來越貪心。optim函數可以實現)
  • 遺傳算法
  • 馬爾可夫鏈蒙特卡洛(MCMC)
  • Metropolis方法

第8章主成分分析PCA

比較:
  • 有監督:從已知正確答案的訓練集中學習,發現數據中的結構
  • 無監督:沒有任何已知答案指導的情況下,想要發現數據中的結構,比如數據降維
數據降維方法:主成分分析,
  • 用一列信息替換多列,監管損失了信息,但在數據的可理解上獲得了有價值的回報
  • 數據集中每一列都是強相關的時候,PCA特別有效

獨立主成分分析(Independent Component Analysis,ICA)是PCA的變形,某些PCA不能使用的情況下,可以發揮很好的作用
方案6:股市數據的降維
2010年1月2日~2011年5月25日期間25只股票的價格

  • 主要函數:
ymd()——lubridate包,將"年-月-日"格式的字符串轉換成日期對象,(可以比較前后時間)
cast()——reshape包,修改原數據的組織結構,創建一個數據矩陣
cor()——相關性矩陣,結合ggplot可以觀察相關性的均值和低相關出現的頻率(強相關的時候PCA有效)
princomp() 和 prcomp()——主成分分析,結果的標准差顯示每一個主成分的貢獻率(成分方差占總方差的比例),返回值loadings每一列代表每一個成分的載荷因子
predict(<pca>)[,1]——用主成分的第一列作為原有數據的預測結果
rec()——反轉數據順序
melt(data,id.vars)——reshape包,修改數據組織結構,創建一個數據矩陣,以id.var作為每行的編號,剩余列數據取值僅作為1列數值,並用原列名作為新數值的分類標記。

第12章模型比較

支持向量機SVM
核方法:用來解決非線性決策邊界。使用一個數學轉換,把原始數據集轉移到一個新的數學空間中,使在 新空間里的決策邊界是簡單的(線性的)。這個轉換是基於一個核函數的計算。
常用的核函數有(4種)           主要超參數
1、線性(linear)                    
2、多項式(polynomial)     多項式次數:degree=3(默認)先提升,最優,然后下降 (過擬合)
3、徑向(redial)                    正則化參數: cost的增加會 使模型與訓練數據擬合更差一些,cost越大,決策邊界越接近線性(簡化)
4、S型(sigmoid)               gamma越大,模型越好

缺點:大數據集上SVM要花費大量時間,一般就不調參數,指數換換核函數

模型比較:垃圾郵件比較SVM、Logitic回歸和knn算法

比較結果的經驗總結:
1、 嘗試多種模型算法高手是知道某些特定問題不合適某些算法,需要把算法嘗試一遍!
2、根據數據的內在結構 篩選模型:結構在這個問題中logistic回歸效果最好,其它非線性模型並不好,說明該問題的決策邊界可能是線性的, 最優 模型一定滿足數據的內在結構特征的(在商業中也是用Logistic回歸來淘汰朴素貝葉斯分類器)
3、根據度量標准 篩選模型參數:模型效果 取決於具體的問題、數據結構特征,同時也取決於你為模型參數調優付出的努力















免責聲明!

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



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