R 筆記

包含命令以及簡單的文字說明,鞏固記憶,並方便以後檢索,包含調用方式一些簡短說明。經歷包括包括《R語言與機器學習》,夾雜一些《R語言實戰》以及參考一些網絡大神的博客。


關於model的summary的說明:

星號(***)表示預測能力,顯著性水平,星號越多,顯著性水平越低,相關的可能越小。

多元R方值(判定係數)代表着從整體上,模型能多大程度上解釋因變量的值,類似於相關係數。

F檢驗:線性模型輸出顯示中的F統計量是用於檢驗模型的統計顯着性的檢驗統計量。 ANOVA顯示中的F統計值用於評估模型中術語或組分的重要性。

T檢驗:差異發生的概率,從而比較差異是否顯著,越顯著相關性越小。

卡方檢驗:傳統卡方檢驗是檢驗自變量與因變量的相關關係

其中A是實際頻數,T是理論頻數。 越大相關可能性越大。

對於缺失值的操作:

              直接排除:簡單但是會排除大量數據,剩下的不能代表總體。

              對於分類變量,可添加一個新的水平,並使用啞變量編碼。

              插補法:使用真實值來確定缺失值,比如已知年級猜測年齡的大小。

              使用均值

 

基礎操作

觀察數據分佈:str,summary

table(factor等的類別與對應出現次數,

 參數中也可以是兩個長度相同的向量,則可以產生一個二維矩陣,

如果統計中想要觀察缺失值,可以加入useNA=”ifany”),

 table基礎上可以直接用prop.table 產生對應比例

mean(平均值)var(方差), sd(標準差),

quantile(計算分位數),IQR(計算四分位距),median(中位數),

dev.new(開一個繪圖窗口),dev.off(關閉一個繪圖窗口)

plot.new(開一個新的畫板)

boxplot(箱圖,觀察數據分佈),hist(直方圖), plot(散點圖),curve(繪製曲線)

pairs(繪製散點圖矩陣,用於觀察多個變量之間的相關性)

在原圖上繪製圖形需要使用低級繪圖命令,如points(x,y)、lines(x,y)、text(x,y)等

pairs.panels(繪製高階散點圖矩陣,包含相關係數,相關橢圓,局部迴歸平滑,psych)

abline(指定截距與斜率,繪製直線)

image(繪製稀疏矩陣,arules)

expression(生成字符串,可以在繪圖中打出數學公式) ?plotmath查看具體表達式

round(四捨五入), 其他見《R語言實戰》5.2.1

CrossTable(交叉表,卡方值表示每個單元格是偶然的可能性大小  gmodels

seq(生成固定步長的向量)

ifelse(根據條件爲True或者False返回一個值)

unlist(將一個list結構,簡化成向量)

is.na(判斷是否爲缺失值)

subset(以某種規則篩選矩陣或者向量)

cbind(將一列加入矩陣)

solve(執行矩陣的逆運算)

t(執行矩陣的轉置運算)

%*% (矩陣乘法)

%in% (判斷某數據結構中的每一個元素是否存在於某數據結構中)

%pin%(部分匹配)

%ain%(完全匹配)

as(格式轉換)

read.csv(讀取csv,可以讀入以逗號爲分割的數據),read_csv(讀取csv, readr),

read.transactions("groceries.csv", sep =",")將groceries.csv以,爲分割讀入一個稀疏矩陣當中,arules

write.csv(保存爲csv)

paste(合併字符串)

lappy(等價於循環,將函數應用到列表的每一個函數,對矩陣來說是每一個,對數據框來說是每一個變量)

apply(等價於循環,將一個函數應用到一個矩陣的每一行或者每一列)

sample(生成某個範圍內的不重複隨機整數)

runif(產生0-1的隨機數序列)

order(以升序或降序將數據列表進行重新排列)

set.seed(生成隨機數種子)

head(查看一個數據框的前幾個值)

expend.grid(創建數據框,不一樣的是,是對變量的所有組合創建數據框,測試模型參數的時候很有用)

source(調用自定義的.r文件)

body(檢查函數的函數體)

formals(檢查函數的形參)

args(獲得函數的參數列表)

fix(手動修改數據框,可修改變量名稱和變量值)

aggregate(Splits the data into subsets,computes summary statistics for each, and returns the

result in aconvenient form.  將數據按照某種規則分割成幾部分,分別計算總結性的

統計量,並將結果以一個方便的表返回。

下面的例子中gradyear是因子,操作是按照因子分別求均值,返回一個數據框)

aggregate(data=teens,age~gradyear,mean,na,rm=TRUE)

ave(Subsets of x[] are averaged, where eachsubset consist of those observations with the

same factorlevels.x分割成幾部分平均,每一個部分包含了具有同樣的因子水平的觀察

值。與上類似,返回一個具有重複的組均值向量,長度上等於原始向量)

ave(teens$age, teens$gradyear,FUN= function(x) mean(x, na.rm = TRUE))

system.time(統計運行時間)

隨機數

rnorm正態分佈

runif均勻分佈

rexp

指數分佈

rf

F分佈

rgamma 

Gamma分佈

rgeom

幾何分佈

rhyper

超幾何分佈

rlnorm

對數正態分佈

rlogis

Logistic分佈

rmultinom

多項分佈

rnbinom

負二項分佈

rpois

泊松分佈

rt

t分佈

rchisq

卡方分佈

 

文本處理

tm,原文見《機器學習與R語言》4.2/Machine Learning with R(P106) 後者更全面

tolower(轉換成小寫,tm),removeNumbers(去除數字,tm),removeWords(去除某一單詞,tm),removePunctuation(去除標點符號,tm),stemDocument(詞根,tm)

findFreqTerms(尋找出現次數不少於規定次數的字符串,tm)

DocumentTermMatrix(創建稀疏矩陣,tm)

wordstem(詞根,SnowballC

wordcloud(創建詞雲圖——賊炫酷,wordcloud)

paste(合併字符串)

read.transactions()將groceries.csv以sep爲分割讀入一個稀疏矩陣當中,arules

 

 

標準化方法

min-max,分佈在[0,1],需自定義

z-score, 按方差標準化,方差爲1,均值爲0,scale()

 

 

其他數據預處理

名義特徵(factor,character,etc.)的啞變量編碼,將一個變量的n 個水平轉化爲(n-1 ) 個bool值,不用考慮每個因子間的相對距離(knn中可用)

離散化數值特徵以便用於分類,可以考慮分位數(樸素貝葉斯中可用)

 

 

近鄰分類(kNN)

原理簡述:

根據距離待測點的距離判斷屬於哪一類,k是離得最近的前k個觀測點進行投票,其中距離函數自選。

K的選取可以根據訓練集案例數量的平方根,多次測試答案最好者;也可以根據距離遠近加權;k使用奇數可減少投票票數相等的可能性。

調用方式:

knn(標準knn實現,輸出是分類結果,無需使用predict,class

 

 

樸素貝葉斯分類(NB, Naive Bayes)

假設:

              數據集中的所有特徵都具有相同的重要性與獨立性。(雖然違背了假設還是很好用,hiahiahia,一種解釋是隻要分類正確,誇張點說,0.51與0.99並無差別 )

原理簡述:

              樸素貝葉斯:

垃圾郵件分類中:

先驗概率爲所有郵件中垃圾郵件的概率,

似然概率爲垃圾郵件的前提下某詞出現的概率,

邊際似然概率爲所有郵件中出現此詞的概率,

後驗概率爲出現此詞的前提下爲垃圾郵件的概率。

很明顯有,

              拉普拉斯估計:由於概率是相乘的,所以可能有一項概率爲0,導致總體概率爲0,因此加一個常數,來避免這種情況。

調用方式:

naiveBayes (調用算法,得出預測模型,可通過predict調用,e1071)

 

 

分而治之——決策樹與規則

原理簡述:

名義特徵

純度的度量方式:熵

              每一個可能的分割方式所引起的均勻性變化:信息增益

              從一個分割中得到的總熵就是根據案例落入分區中的比例 加權的 個分區的熵值總和。(除去信息增益,也可使用基尼係數卡方統計量增益比

數值特徵

              設置閾值,轉換爲名義特徵。

預剪枝,後剪枝,子樹提升,子樹替換

調用方式:

C5.0(調用決策樹模型,使用predict調用,C50)

? C5.0Control(在幫助頁面顯示如何精細調整模型的細節)

trials (樹的數量,自適應增強算法(adaptive boosting)_多個能力弱的算法集合以提升效果,一般能提升使用之前正確率的25%)

costs(添加懲罰因子,錯誤否定與錯誤肯定之間代價的衡量)

rule=TRUE(利用分類規則生成模型)

 

 

獨立而治之(覆蓋算法)——規則學習

原理簡述:

              貪婪算法:基於先到先得思想(獨立而治之與分而治之都是)

              1R: 單規則分類

RIPPER(RepeatedIncremental Pruning to Produce Error Reduction)

             

調用方式:

OneR(單規則分類,利用predict進行預測,RWeka)

JRip(更復雜的規則學習方法,RWeka)

 

 

預測數值型數據1——迴歸方法

原理簡述:

              線性迴歸,簡單線性迴歸與多元線性迴歸,邏輯迴歸(logisticregression,對二元分類),泊松迴歸(Poissonregression,對整型數據)

              上述迴歸以及許多其他迴歸均屬於一類模型——廣義線性迴歸(General Linear Model,GLM),連接函數指定自變量與因變量之間的數學關係。

              普通最小二乘法(Ordinary Least Squares, OLS)

              相關橢圓(correlationellipse):提供變量如何密切相關的可視化信息,位於橢圓中心的點表示x軸變量與y軸變量的均值所確定的點。兩個變量之間的相關性由橢圓的形狀表示,越拉伸,相關性越強。

              局部迴歸平滑(loesssmooth):可表示x軸變量與y軸變量之間的一般關係。主要思想是取一定比例的局部數據,在這部分子集中擬合多項式迴歸曲線,這樣我們便可以觀察到數據在局部展現出來的規律和趨勢。

調用方式:

lm(線性模型;最小二乘法)

cor(計算相關係數矩陣)

pairs(繪製散點圖矩陣)

pairs.panels(繪製高階散點圖矩陣,包含相關係數,相關橢圓,局部迴歸平滑,psych)

說明:

              自變量加不加1一樣;

爲了添加非線性效果,可以在自變量中添加某因子的多項式;

也可以添加多個變量之間的相互作用,例如:charges~bmi* smoker ócharges~ bmi+ smoker+ bmi:smokers,其中最後一項代表着變量間的相互作用。

 

 

預測數值型數據2——迴歸樹與模型樹

原理簡述:

例子見《機器學習與R語言》6.3

              迴歸樹(regressiontree)並沒有使用線性迴歸的方法,而是基於到達葉節點的案例的平均值做出預測。

              模型樹(Classification and regressiontree)與迴歸樹以大致相同的方式生長,但是在每個節點,根據到達該節點的安理建立多元線性迴歸模型,可能更難理解,但是能夠做到更加精確。

              與熵相對應,迴歸樹的一致性(均勻性)以統計量(方差,標準差,平均絕對值偏差等)來度量。一種常見的分割標準稱爲標準偏差減少(Standard DeviationReduction,

SDR):

其中, 指標準差,而 是由對一個特徵的一次分割產生的值; 指的是集合 中觀測值的數量。從本質上講,公式度量的是,從原始值的標準差減去分割後加權的標準差的減少量。

 

調用方式:

rpart(擬合分類樹或者回歸樹,使用predict預測, rpart)

rpart.plot(將決策樹可視化,rpart.plot)

M5P(模型樹,使用predict預測,RWeka)

說明:

              Rpart使用predict預測時,第一個參數是模型,第二個參數是測試用數據框,第三個參數是type,共有三個選項,分別是vector(預測數值型數據),class(預測類別),prob(預測分類的概率)

              Rpart.plot有一些控制參數,digits用於控制包含在圖中的數字位數,fallen.leaves強制葉節點與圖的底部保持一致(對齊),type與extra影響決策和節點被標記的方式。

 

 

黑箱方法1——神經網絡

原理簡述:

              激活函數(activationfunction)將輸入轉換爲單一輸出。閾值激活函數(不常用),S型激活函數(sigmoid/ logistic function ),線性激活函數產生類似於線性迴歸模型的神經網絡,飽和線性激活函數雙曲正切函數高斯函數產生徑向基函數(Radial basis Function,RBF)網絡模型。

網絡拓撲(networktopology)描述了神經元的數量以及層數和他們連接的方式。輸入結點(Input Node),輸出節點(Output Node),(layer),單層網絡(single-layer network),多層網絡(multilayer network),隱藏層(hiddenlayer),完全連接(fully connected),前饋神經網絡(feedforward N),遞歸神經網絡(Recurrent N),反饋神經網絡(Feedback N),通用函數逼近器(universal functionapproximator)

訓練算法(trainingalgorithm)制定如何設置連接權重,以便抑制或者增加神經元在輸入信號中的比重。後向傳播算法(Back Propagation),梯度下降法(gradient descent),學習率(learning rate)。

              標準化很重要,否則量級低的變量會被量級高的變量支配。

調用方式:

neuralnet(用於訓練數值預測的神經網絡,使用compute進行預測,可使用plot進行可視化,圖的底部包括誤差平方和和步數,neuralnet)

compute(進行計算,第一個參數是模型,第二個參數是數據,返回帶有兩個分量的列表,$neurons,$net. results, neuralnet

其他添加包: nnet(標準R的一部分,可能最常用),RSNNS(完整的神經網絡功能,但是學起來更難)

黑箱方法2——支持向量機

原理簡述:

              支持向量機(support vector machines),線性可分的(linearly separable),最大間隔超平面(Maximum Margin Hyperplane,MMH),凸包(convex hull),二次優化(quadratic optimization),非線性可分時,引入鬆弛變量(slack variable),核技巧(kerneltrick),線性核函數(linear k),多項式核函數(polynomial k),S型核函數(sigmoid/logistic k),高斯RBF核函數(GaussianRBF k)被證明對許多類型的數據都運行的很好。

調用方式:

Ksvm(,調用svm算法,kernlab)

 

 

探尋模式——基於關聯規則的購物籃分析

原理簡述:

              用於判別事務性數據中商品之間關聯的機器學習方法,由於其在零售店之間的廣泛使用,所以這種方法通常稱爲(市場)購物籃分析(market basket analysis),無監督,只能定性確定其正確性。

              Apriori算法:爲了減少需要搜索的項集數,而用規則高效的搜索大型數據庫的最廣泛使用的方法。

              Apriori性質(Aprioriproperty:一個頻繁項集的子集必然是頻繁的,如:若{蘋果,口紅}是頻繁的,那麼{蘋果},{口紅}也必然是頻繁的。

              支持度(support)是指其在數據中出現的頻率:

              置信度(confidence)是指該規則的預測能力或者準確度的度量:

              提升度(lift):已知另一類商品被購買,提升度用來度量一類商品相對於他的一般購買率,此時購買的可能性有多大

              稀疏矩陣(sparse matrix)

調用方式:

Read.transactions(創建稀疏矩陣,arules)

Inspect(查看交易數據的內容,groceries[1:5]查看第1-5條交易數據, arules)

ItemFrequency(查看某商品的交易頻率,groceries[,1:5]查看第1-5個商品的頻率,arules)

itemsFrequencyPlot(繪製商品的頻率圖,arules)

image(繪製稀疏矩陣,arules

apriori(尋找關聯規則,arules)

sort(對規則進行排序,arules)

subset(篩選規則,arules

write(將formalclass rules 寫入csv中,arules)

說明:

              對於稀疏矩陣的Summary中第一部分給出了行數與列數以及密度,行是一條交易數據,列是一種種類,密度指非零矩陣單元的比例;第二部分給出了出現最頻繁的種類;第三部分給出了長度的分佈;最後給出了關於交易規模的統計。即所有種類中,在數據中只出現了一次的有多少,出現了兩次的有多少……

              對於apriori算法的summary中包含了規則的數目,規則的長度統計(所有規則中,長度爲2的是多少,3的是多少),長度的分位數,支持度、置信度、提升度的分位數,最後一行給出了篩選信息的預定義參數。

 

 

尋找數據的分組——k均值聚類

原理簡述:

              尋找超平面,最小化代價。

無監督分類(unsupervisedclassification)。

              半監督學習(semi-supervised learning):一種爲先使用無監督學習算法來創建標籤,然後採用有監督學習算法來求出最重要的預測指標。

              K的一種取值方法是取 ,n是案例的總數。另一種方法是使用肘部法,類內部同質性上升的肘部點,或者類的異質性下降的肘部點。

調用方式:

kmeans(k均值聚類,需要先標準化,第二個參數指定類的數目,stats)

說明:

              得出的模型其中的兩個參數爲center,size, cluster前者是聚類中心各個指標值,中者是每一類的案例數量,後者是每一個案例的歸類。

 

 

模型性能的評價1——性能評價指標

原理簡述:

              類的不平衡問題:當數據中有很大一部分記錄屬於同一個類別時,可能即使什麼都不做,仍然會有很大的正確率,然而卻沒有任何意義。作爲解決方案之一,分而治之——決策樹中的懲罰因子是很好的一種。     

              分類問題中,分類的概率也很有用,得到概率的方法是在predict時,可將類型設定爲prob,posterior,raw或者probability類型,具體參見模型的文檔。

              混淆矩陣(confusion matrix)是一張二維表,(當預測值只有兩個水平時好像和交叉表是一個概念),他按照預測值是否匹配數據的真實值來對預測值進行分類第一個維度表示所有可能的類別,第二個維度表示真實的類別。

我們的感興趣(對,就是這麼任性)的類別稱爲陽性(positive),其他所有類別稱爲陰性(negative)。

              真陽性(True Positive):正確的分類感興趣的結果。

              真陰性(True Negative):正確的分類爲不感興趣的結果。

              假陽性(False Positive):錯誤的分類爲感興趣的類別。

              假陰性(False Negative):錯誤的被分爲不感興趣的類別。

              準確度(accuracy)=

              錯誤率(error rate)  

              Kappa統計量:通過解釋完全因爲巧合而預測正確的概率,它對準確度進行了調整。小於0.2:很差;0.2-0.4:尚可;0.4-0.6:中等;0.6-0.8:不錯;0.8-1:灰常好。以下是最常用的一種定義方法:

其中,Pr指的是分類器與真實值之間的真實一致性(a,即正確分類的比例)與期望一致性(e,完全偶然導致預測值和實際值相同的概率,可以假設獨立,然後通過概率相乘來進行計算)。

              靈敏度(真陽性率,Sensitivity):度量了陽性樣本杯正確分類的比例

              特異性(真陰性率,Specificity):度量了陰性樣本杯正確分類的比例。

精確度(陽性預測值,Precision):定義爲真陽性在所有預測爲陽性案例中的比例。

回溯精確度(Recall):度量了陰性樣本杯正確分類的比例。

              F度量(Fmeasure):將精確度與回溯精確度合併爲一個單一值,即取其調和平均值

這並不總是是正確,因爲這裏假設了兩者具有相同的權值,更爲一般的,有以下的定義。

調用方式:

交叉表可以使用table來繪製,也可以使用CrossTable命令。

caret包提供了大量的對機器學習模型和數據進行準備、訓練、評估以及可視化的工具,

它提供了另一個創建稀疏矩陣的函數,語法和table相似,但需要指出陽性的輸

出。

confusionMatrix(計算混淆矩陣,計算準確率、錯誤率、kappa值、靈敏度、特異

性,caret)。

sensitivity(計算靈敏度與特異性、回溯精確度, 需要指定陽性,caret)

posPreValue(計算精確度,caret)

Kappa( 計算kappa,我們主要關注不加權的kappa,加權kappa主要用於存在不同尺度一

致性的情況,如溫暖與熱的一致性要大於溫暖與冷的一致性,vcd)

kappa2(直接應用於數據框中的預測值與世紀分類向量來計算Kappa,irr)

注意:內置的kappa函數與此統計量無關。

 

 

 

模型性能的評價2——性能權衡的可視化

原理簡述:

              ROCR提供了一套易於使用的函數用於可視化分類模型性能的統計量。它包含了很多函數用來計算大部分常用的性能度量指標來進行可視化。

              ROC(Receiver Operating Characteristic,受試者工作特徵)曲線,縱軸表示真陽性的比例(靈敏度),橫軸表示假陽性的比例(1-特異性)。此曲線表示了不同假陽性閾值上的真陽性的比例,分類器的預測值通過模型對陽性類別的估計概率降序排序,從原點開始,每個預測值對應的真陽性與假陽性將分別導致曲線沿縱軸移動或者沿橫軸移動,一個示意圖如下所示,自己看吧。

離完美分類器越近,說明能夠越好的識別陽性值,可以使用ROC曲線下面積(Areaunder the ROC,AUC)來衡量。取值從0.5到1,每個0.1分別被評價爲F,D,C,B,A.即無法區分,很差,一般,良好,優秀。

調用方式:

prediction(所有使用ROCR的分類評估都需要用此方法創建一個具有標準格式的對象,需要

兩個數據向量,第一個必須包含陽性類別的估計概率,第二個必須包含每個案例的

因子標籤率,第三個爲可選參數,輸入一個向量來指定陽性標籤與陰性標籤,向量

的第一項爲陽性標籤,第二項指定陰性標籤。,ROCR)

performance(計算預測對象的性能度量值,ROCR)

------------------ROCR: ROC相關-----------------

#計算ROC性能度量值

pred<-performance(pred, measure=”tpr”, x.measure=”fpr”)

plot(pred)

#繪製參考線

abline(a=0,b=1)

#計算AUC

performance(pred, measure=”auc”)

---------------------------------------------------------------

 

 

 

模型性能的評價3——評估未來的性能

簡述&調用:

              前面的評價指標提供的都是對模型再代入誤差的認識。但是它並不是一個很好的對未來的性能評價的標識器,即對從未見過的數據的模型評價可能不太靠譜。

              保持法(Holdout sampling):將數據劃分成訓練集與數據集的過程。訓練數據集用來生成模型,測試數據集對結果進行評估,比較常見的是1/3用來測試,剩下的用來訓練,記得要保證隨機分佈。

              隨機抽樣可能有一些問題,不如分層抽樣好(原因自己想),caret的creatDataPartition()可以基於分層抽樣創建隨機劃分,需要指定類別的向量,以及樣本比例,得出一個包含選出的案例的序號的向量。

因爲保持法對未來的性能進行真實的估計,所以絕不允許測試數據集的結果影響模型,如果基於重複測試的結果選擇一個最好的模型,那麼很容易在不知不覺中違反這個規則。一種典型的解決方案是50%訓練集,25%測試集,25%驗證數據集。

因爲模型在更大的數據集當中進行訓練可以得到更好的性能,所以常見做法是選擇並評估了最終模型之後,將模型在所有數據上重新訓練,以達到最好的效果。

這種方法太過保守,有時候難以包括極端樣本,而且大量的數據被用來驗證和測試模型,所以一個新的方法來了。

              交叉驗證:重複保持法是k折交叉驗證(k fold Cross Validation)的基礎,k折CV將數據隨機的分爲k個完全分隔開的部分,被稱爲折。雖然k可以被設爲任意數值,但是最常用的是10折CV,對於每一折,模型對剩下的數據建模,使用剩餘的一折進行評估,訓練與評估的過程重複10次,然後輸出平均指標。

k折的極限爲留一交叉驗證法(Leave-one-out cross-validation),即每一個樣本爲1折,但是實用性不大。

我們可以使用caret的creatFlods()來創建交叉驗證數據集,該函數與分層隨機抽樣類似,也嘗試在每一折中保持與原始數據類似的各類別比例,返回值是一個列表,包含了k個向量。訓練過程可以採用lappy()函數。

也許當前能可靠的估計模型性能的最好標準是重複k折CV(repeated k-fold crossvalidation)。雖然會增加運算的複雜度,但是可以得到穩健的估計。

自助抽樣法(bootstrapsampling)創建一些隨機選取的仍包含同等數量數據的訓練集,然後用來估計模型的統計量。與前面的方法不同的是,這種方法採取的是有放回的抽樣方式,每個樣本被包含在訓練集中的概率爲63.2%,即此方法只能代表63.2%的全體。此方法對完整數據的代表性與交叉驗證相比更弱。

顯然,只利用這麼點數據訓練的模型可能不太好,有一種特殊的自助方法可以處理這個問題,被稱爲0.632自助法(0.632bootstrap),通過訓練數據集(過於樂觀)與測試數據集(過於悲觀)的函數來計算最終的性能度量。

此方法有一個優勢,對小數據集的效果更好,此外除了性能度量還有別的應用。

 

 

提高模型的性能——調用多個模型來提高性能

原理&命令:

              參數調整:調節模型合適選項的過程。

              caret包中的train支持以下模型與參數的的自動調整

設置parameter的時候在parameter之前要用“.”做前綴,調用結果有輸入數據的簡單描述,預處理和重抽樣方法應用情況的信息,候選模型評估的列表,最佳模型的選擇。

caret 的trainControl()用來創建一系列的配置選項,也稱爲控制對象,與train()一起使用,這些選項考慮到了諸如重抽樣策略以及用於選擇最佳模型的度量這些模型評價標準的管理,其中兩個重要的參數是method和selectionFunction,前者是抽樣的方法,具體如下圖所示:

              SelectionFunction參數可以設定一函數用來在各個候選者中選擇最優的模型,其中包含了3個參數,best函數簡單的選擇具有最好的某特徵度量值的候選者,這也是默認的選項,另外的兩個函數用來在最好模型的特定閾值之內選擇最節儉的模型。oneSE函數選擇最好性能標準差之內最簡單的候選者。Tolerance選擇某個用戶指定比例內的最簡單的候選者。

              train()的metric參數用來定義模型評估用到的統計量。

 

提高模型的性能——元學習

原理簡述:

              元學習(meta learning):組合與管理多個模型的預測技術。

              集成學習(ensemble):利用類似的創建一個多樣性專家組的原理的元學習方法。所有的。

              分配函數(allocation function)決定每個模型接受完整的訓練數據集還是某個抽樣版本。組合函數(combination function)用來對預測中的不一致進行調節,如投票表決等,或者更加複雜的機制。有時候還建立一個模型來預測組合函數,這種使用多個模型的預測來訓練一個仲裁模型的過程稱爲堆疊(stacking)。

              使用此方法的好處在於:能夠節省尋求單一最佳模型的時間,只需要訓練一批表現湊活的然後再整合就可以了;另外,他對未來問題有更好的普適性;可以提升大量數據或者少量數據的性能;將不同領域數據合成的能力;對困難學習任務更爲細緻的瞭解。

              自助匯聚法(bagging)是最好的集成學習方法之一,使用單一的機器學習算法產生多個模型,然後使用投票(對於分類問題)或者平均(對於數值預測)的方法來組合預測值。它只要使用不穩定學習器(隨着數據發生很小變化產生差別很大的模型,如決策樹)就能得到很好的效果。

              另一種基於集成學習的受歡迎的方法是boosting,因爲他增加弱學習器的性能來獲得強學習器的性能,boosting被證明可以經過簡單的添加更多的弱學習器來將性能提升到任意閾值。與前者最重要的差異在於,他的重抽樣數據集是專門構建用來產生互補的模型,而且所有的選票不是同等重要,會根據性能進行加權。他的算法稱爲AdaBoost或者自適應boosting該算法產生弱分類器來迭代的學習訓練集中很大比例的難以分類的樣本,對經常分錯的樣本進行更多的關注(即給予更大的權重)。

              從未加權的數據開始,第一個分類器嘗試對結果建模。預測正確的樣本在下一個分類器中出現的可能性比較小,相反地,難以分類的樣本將會出現的更加頻繁,當下一輪的弱分類器被添加以後,它們用來訓練後面更難得樣本,該過程會持續進行,直到達到要求的總誤差或者性能不再提高。這時,每個分類器的票數會按照他們在建模數據集的準確度進行加權。

              他在決策樹中使用的最多。

              大名鼎鼎的隨機森林(random forest)來了,它只關注決策樹的繼承學習,將bagging和隨機特徵選擇結合,對決策樹模型提供額外的多樣性。在樹的集成(森林)產生之後,該模型使用投票的方法來組合預測結果。他更容易使用,也具有更少的過擬合傾向。

              出包錯誤率(out-of-bag error rate,OBB)也是對測試集錯誤的一個無偏估計,表示對未來性能的一個合理估計。

調用方式:

bagging(bagging決策樹的經典實現,nbagg控制用來投票的決策樹的數目,默認是25,

ipred)

train(bagging決策樹的實現,method爲treebag,與上面相比,可以知道他在未來的性能

方面表現如何,caret,ipred)

bag(提供了通用的bagging實現,他需要三個函數,一個用來擬合模型,一個用來預測,

一個用來聚集投票結果,svmBag提供了我們可以使用的三個函數,我們可以使用它來創建bagControl,然後進行計算,caret還包括了樸素貝葉斯模型(nbBag),決策樹(ctreeBag)和神經網絡(nnetBag),caret)

boosting(Adaboost.M1算法,adabag)

boosting.cv(Adaboost.M1算法,10折CV,adabag)

train(method=”Adaboost.M1”, Adaboost.M1算法,caret)

randomForest(隨機森林算法實現,randForest)

train(method=”rf”,random Forest算法,caret)

 

提高R語言的性能

簡述:

ff添加包構建基於磁盤的數據框。bigmemory添加包使用大矩陣,此作者還提供了bigalgebra,biganalysis,bigtabulate三個包,使得簡單的分析成爲可能,其中biganalysis可以執行bigkmeans()函數。

改進版的數據框(data tableof data.table)在構造子集、連接和分組運算上普遍比數據框快,但他仍然是數據框,所以他的結果對象,能夠用到所有接受數據框的R函數中。就是兼容性不降,但是速度給你提上去,這個真的賊棒!

並行運算內核(core),羣集(cluster)易並行(embarrasingly parallel)

foreach添加包的foreach可能是最簡單的開啓並行運算的方法。但是需要先使用doParallel註冊。

R︱並行計算以及提高運算效率的方式(parallel包、clusterExport函數、SupR包簡介) http://blog.csdn.net/sinat_26917383/article/details/52719232

調用方式:

------------------------使用parallel包來加速------------------------------

library(parallel)

#打開四核,具體核數根據機器的核數決定

cl <- makeCluster(getOption("cl.cores", 4));

system.time({res <- parLapply(cl, 1:5000000,  fun)});

#關閉並行計算

stopCluster(cl);

------------------------------------------------------------------------------------

智能優化算法

粒子羣算法pso

模擬退火算法GenSA

遺傳算法mcga\genalg\rgenoud

 http://blog.csdn.net/dingming001

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章