1. 程式人生 > >R語言進行機器學習方法及實例

R語言進行機器學習方法及實例

最近鄰 ridge glog 原始的 默認值 ria er模型 不能 預測概率

機器學習的研究領域是發明計算機算法,把數據轉變為智能行為。機器學習和數據挖掘的區別可能是機器學習側重於執行一個已知的任務,而數據發掘是在大數據中尋找有價值的東西。

機器學習一般步驟

  • 收集數據,將數據轉化為適合分析的電子數據
  • 探索和準備數據,機器學習中許多時間花費在數據探索中,它要學習更多的數據信息,識別它們的微小差異
  • 基於數據訓練模型,根據你要學習什麽的設想,選擇你要使用的一種或多種算法
  • 評價模型的性能,需要依據一定的檢驗標準
  • 改進模型的性能,有時候需要利用更高級的方法,有時候需要更換模型

機器學習算法

有監督學習算法

用於分類:k近鄰,樸素貝葉斯,決策樹,規則學習,神經網絡,支持向量機
用於數值預測:線性回歸,回歸樹,模型樹,神經網絡,支持向量機

無監督學習算法

用於模式識別(數據之間聯系的緊密性):關聯規則
用於聚類:k均值聚類

R語言機器學習算法實現

kNN(k-Nearest Neighbors,k近鄰)

  • 原理:計算距離,找到測試數據的k個近鄰,根據k個近鄰的分類預測測試數據的分類
  • 應用k近鄰需要將各個特征轉換為一個標準的範圍(歸一化處理),可以應用min-max標準化(所有值落在0~1範圍,新數據=(原數據-最小值)/(最大值-最小值)),也可以應用z-score 標準化(新數據=(原數據-均值)/標準差)。
  • 對於名義變量(表示類別),可以進行啞變量編碼,其中1表示一個類別,0表示其它類別,對於n個類別的名義變量,可以用n-1個特征進行啞變量編碼,比如(高,中,低),可以用高、中兩類的啞變量表示這三類(高:1是,0 其它,中:1是,0,其它)
  • 優點:簡單且有效,對數據分布沒有要求,訓練階段很快;
  • 缺點:不產生模型,在發現特征之間的關系上的能力有限,分類階段很慢,需要大量的內存,名義變量和缺失數據需要額外處理
  • R代碼:
    使用class包的knn函數,對於測試數據中的每一個實例,該函數使用歐氏距離標識k個近鄰,然後選出k個近鄰中大多數所屬的那個類,如果票數相等,測試實例會被隨機分配。
    ?? dt_pred <- knn(train = dt_train,test = dt_test,class = dt_train_labels,k = 3) #train:一個包含數值型訓練數據的數據庫;test:一個包含數值型測試數據的數據框;class訓練數據每一行分類的一個因子變量;k:標識最近鄰數據的一個整數(通常取實例數的平方根); 該函數返回一個向量,該向量含有測試數據框中每一行的預測分類
    ??盡管kNN是並沒有進行任何學習的簡單算法,但是卻能處理及其復雜的任務,比如識別腫瘤細胞的腫塊。
  • 對R自帶iris數據用kNN進行訓練、預測並與實際結果對比
llibrary(class)
library(gmodels)

#prepare data
set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
iris_z <- as.data.frame(scale(iris_rand[,-5])) #z score normalize
train <- iris_z[1:105,]
test <- iris_z[106:150,]
train.label <- iris_rand[1:105,5]
test.label <- iris_rand[106:150,5]

#kNN
pred <- knn(train,test,train.label,k=10)

#comfusion matrix 
CrossTable(pred,test.label,prop.r = F,prop.t = F,prop.chisq = F)

技術分享
??這個結果顯示kNN對測試數據全部預測正確

樸素貝葉斯分類

  • 原理:基於樸素貝葉斯定理,根據先驗概率計算預測實例的屬於不同類別的總似然,再將某類別的似然除以不同類別似然的和得到預測實例在某類別的概率
  • 應用樸素貝葉斯算法每個特征必須是分類變量,對於數值型變量,可以將數值型特征離散化(分段),可以根據直方圖查看數據明顯的分隔點,如果沒有明顯的分隔點,可以使用三分位數,四分位數,五分位數,分段太少會把重要信息丟失
  • 拉普拉斯估計:對於某些從來沒有出現的概率為0的,會影響概率的估計,拉普拉斯估計本質上是在概率表的每個計數加上一個較小的數,這樣保證每一類中每個特征發生的概率是非零的。
  • 優點:簡單、快速、有效;能處理噪聲數據和缺失數據;需要用來訓練的例子相對較少,但同樣能處理好大量的例子;很容易獲得一個預測的估計概率值;
  • 缺點:依賴於一個常用的錯誤假設,即一樣的重要性和獨立特征;應用在大量數值特征的數據集時並不理想;概率的估計值相對於預測的類而言更加不可靠。
  • R代碼:
    使用維也納理工大學統計系開發的e1071添加包中的naiveBayes
    ??m <- naiveBayes(train,class,laplace=0) #train:數據框或者包含訓練數據的矩陣,class:包含訓練數據每一行的分類的一個因子向量,laplace:控制拉普拉斯估計的一個數值,可以進行調節看是否會提高模型性能;該函數返回一個樸素貝葉斯模型對象,該對象能夠用於預測
    ?? p <- predict(m,test,type="class") #m:由函數naiveBays( )訓練的一個模型 ,test:數據框或者包含測試數據的矩陣,包含與用來建立分類器的訓練數據的相同特征;type:值為"class"或者"raw",標識預測向量最可能的類別值或者原始預測的概率值
library(e1071)
library(gmodels)

set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
train <- iris_rand[1:105,-5]
test <- iris_rand[106:150,-5]
train.label <- iris_rand[1:105,5]
test.label <- iris_rand[106:150,5]

#tranform numerical variable to classified variable
conver_counts <- function(x){
  q <- quantile(x)
  sect1 <- which(q[1] <= x & x<= q[2])
  sect2 <- which(q[2 ]< x & x <= q[3])
  sect3 <- which(q[3]< x & x <= q[4])
  sect4 <- which(q[4]< x & x <= q[5])
  x[sect1] <- 1
  x[sect2] <- 2
  x[sect3] <- 3
  x[sect4] <- 4
  return(x)
}
train <- apply(train,2,conver_counts)

#naiveBayes
m <- naiveBayes(train,train.label,laplace=1)
pred <- predict(m,test,type="class") 

#comfusion matrix 
CrossTable(pred,test.label,prop.r = F,prop.t = F,prop.chisq = F)

技術分享

可見對第一類(setosa)分類上預測錯誤率很高,這可能反映了樸素貝葉斯算法的缺點,對於處理大量數值特征數據集時並不理想

決策樹

  • 原理:以樹形結構建立模型。使用一種稱為遞歸劃分的探索法。這種方法通常稱為分而治之,因為它利用特征的值將數據分解為具有相似類的較小的子集。從代表整個數據集的數據結點開始,該算法選擇最能預測目標類的特征,然後,這些案例將被劃分到這一特征的不同值的組中,這一決定形成了第一組樹枝。該算法繼續分而治之其他結點,每次選擇最佳的候選特征,直到達到停止的標準。如果一個節點停止,它可能具有下列情況:節點上所有(幾乎所有)的案例都屬於同一類,沒有剩余的特征來分辯案例之間的區別,決策樹已經達到了預先定義的大小限制。
  • C5.0算法,時最知名的決策樹算法之一,單線程版本的源代碼是公開的,R中有編寫好的該程序。C5.0算法已經成為生成決策樹的行業標準,因為它適用於大多數類型的問題,並且可以直接使用。與其它先進的機器學習模型(神經網絡和支持向量機)相比,一般表現的幾乎一樣,並且更容易理解和部署
  • 選擇最佳的分割,需要確立分割的標準,有信息增益,基尼系數,卡方統計量,和增益比,C5.0算法使用信息增益
  • 修剪決策樹:如果決策樹增長過大,將會使決策過於具體,模型將會過度擬合訓練數據,解決這個問題的一種方法是一旦達到一定數量的決策,或者決策節點僅含有少量的案例,我們就停止樹的增長,這叫做提前停止法,或者預剪枝決策樹法。分為預剪枝(提前規定樹的大小)和後剪枝(一旦樹生長的過大,就根據節點處的錯誤率使用修剪準則將決策樹減少到更合適的大小,通常比預剪枝更有效)。
  • 自適應增強算法:進行許多次嘗試,在決策樹中是建立許多決策樹,然後這些決策樹通過投票表決的方法為每個案例選擇最佳的分類。
  • 優點:一個適用於大多數問題的通用分類器;高度自動化的學習過程,可以處理數值型數據、名義特征以及缺失數據;只使用最重要的特征;可以用於只有相對較少訓練案例的數據或者有相當多訓練案例的數據;沒有數學背景也可解釋一個模型的結果(對於比較小的樹);比其他復雜的模型更有效
  • 缺點:決策樹模型在根據具有大量水平的特征進行劃分時往往是有偏的;很容易過度擬合或者不能充分擬合模型;因為依賴於軸平行分割,所以在對一些關系建立模型時會有困難;訓練數據中的小變化可能導致決策邏輯的較大的變化;大的決策樹可能難以理解,給出的決策可能看起來違反直覺。
  • R代碼:
    使用R包C50的函數C5.0
    ??m <- C5.0(train,class,trials=1,costs=NULL) #train:一個包含訓練數據的數據框;class:包含訓練數據每一行的分類的一個因子;trials:為一個可選數值,用於控制自適應增強循環的次數(默認值為1),一般用10,因為研究標明,這能降低關於測試數據大約25%的概率;costs:為一個可選矩陣,用於給出與各種類型錯誤相對應的成本,和混淆矩陣稍微不同,行用來表示預測值,列用來表示實際值);函數返回一個C5.0模型對象,該對象能夠用於預測
    ??p <- predict(m,test,type="class") #m:有函數C5.0()訓練的一個模型;test:一個包含訓練數據的數據框,該數據框和用來創建分類其的數據框有同樣的特征;type:取值為"class"或者"prob",表識預測是最可能的類別值或者是原始的預測概率;該函數返回一個向量,根據參數type的取值,該向量含有預測的類別值或者原始預測的概率值
library(C50)
library(gmodels)

set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
train <- iris_rand[1:105,-5]
test <- iris_rand[106:150,-5]
train.label <- iris_rand[1:105,5]
test.label <- iris_rand[106:150,5]

#C50
m <- C5.0(train,train.label,trials = 10)
pred <- predict(m,test,type="class") 

#comfusion matrix 
CrossTable(pred,test.label,prop.r = F,prop.t = F,prop.chisq = F)

技術分享

規則學習分類

  • 原理:規則學習算法使用了一種稱為獨立而治之的探索法。這個過程包括確定訓練數據中覆蓋一個案例子集的規則,然後再從剩余的數據中分離出該分區。隨著規則的增加,更多的數據子集會被分離,直到整個數據集都被覆蓋,不再有案例殘留,獨立而治之和決策樹的分而治之區別很小,決策樹的每個決策節點會受到過去決策歷史的影響,而規則學習不存在這樣的沿襲。隨著規則的增加,更多的數據子集會被分離,知道整個數據集都被覆蓋,不再有案例被保留
單規則(1R)算法
  • ZeroR,一個規則學習算法,從字面上看沒有規則學習,對於一個未標記的案例,不用考慮它的特征值就會把它預測為最常見的類
  • 單規則算法(1R或OneR)在ZeroR的基礎上添加一個規則。像K近鄰一樣雖然簡單,但是往往表現的比你預期的要好。
  • 優點:可以生成一個單一的、易於理解的、人類可讀的經驗法則(大拇指法則);表現往往出奇的好;可以作為更復雜算法的一個基準;
  • 缺點:只使用了一個單一的特征;可能會過於簡單
  • R代碼:
    使用R包RWeka中OneR()函數來實現1R算法
    ??m <- OneR(class ~ predictors,data = mydata) #class:是mydata數據框中需要預測的那一列;predictors:為一個公式,用來指定mydata數據框中用來進行預測的特征;data:為包含一個class和predictors所要求的數據的數據框;該函數返回一個1R模型對象,該對象能夠用於預測
    ??p <- predict(m,test) #m:由函數OneR()訓練的一個模型;test:一個包含測試數據的數據框,該數據框和用來創建分類器的訓練數據有著相同的特征;該函數返回一個含有預測的類別的向量
library(RWeka)
library(gmodels)

set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
train <- iris_rand[1:105,]
test <- iris_rand[106:150,-5]
test.label <- iris_rand[106:150,5]

m <- OneR(Species ~ .,data=train)
pred <- predict(m,test)
CrossTable(pred,test.label,prop.r = F,prop.t = F,prop.chisq = F)

查看生成的規則,按照Petal的寬度,分成三類,正確分類了105個裏面的101個
技術分享
對於測試數據的混合矩陣如下
技術分享
可見只使用了一個規則也能,也做到了不錯的效果

RIPPER算法

??對於復雜的任務,只考慮單個規則可能過於簡單,考慮多個因素的更復雜的規則學習算法可能會有用,但也可能因此會變得更加難以理解。早期的規則學習算法速度慢,並且對於噪聲數據往往不準確,後來出現增量減少誤差修剪算法(IREP),使用了生成復雜規則的預剪枝和後剪枝方法的組合,並在案例從全部數據集分離之前進行修剪。雖然這提高了性能,但是還是決策樹表現的更好。直到1995年出現了重復增量修剪算法(RIPPER),它對IREP算法進行改進後再生成規則,它的性能與決策樹相當,甚至超過決策樹。

  • 原理:可以籠統的理解為一個三步過程:生長,修剪,優化。生長過程利用獨立而治之技術,對規則貪婪地添加條件,直到該規則能完全劃分出一個數據子集或者沒有屬性用於分割。與決策樹類似,信息增益準則可用於確定下一個分割的屬性,當增加一個特指的規則而熵值不再減少時,該規則需要立即修剪。重復第一步和第二步,直到達到一個停止準則,然後,使用各種探索法對整套的規則進行優化。
  • 優點:生成易於理解的、人類可讀的規則;對大數據集和噪聲數據有效;通常比決策樹產生的模型更簡單
  • 缺點:可能會導致違反常理或這專家知識的規則;處理數值型數據可能不太理想;性能有可能不如復雜的模型
  • R代碼:
    使用R包RWeka中JRip()函數,是基於Java實現的RIPPER規則學習算法
    ??m<JRip(class ~ predictors,data = my data) #class:是mydata數據框中需要預測的那一列;predictors:為一個R公式,用來指定mydata數據框中用來進行預測的特征;data:為包含class和predictors所要求的數據的數據框;該函數返回一個RIPPER模型對象,該對象能夠用於預測。
    ??p <- predict(m , test) #m:由函數JRip()訓練的一個模型;test:一個包含測試數據的數據框,該數據框和用來創建分類器的訓練數據有同樣的特征;該函數返回一個含有預測的類別值的向量。
library(RWeka)
library(gmodels)

set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
train <- iris_rand[1:105,]
test <- iris_rand[106:150,-5]
test.label <- iris_rand[106:150,5]

m <- JRip(Species ~ .,data=train)
pred <- predict(m,test)
CrossTable(pred,test.label,prop.r = F,prop.t = F,prop.chisq = F)

技術分享
這次使用了三個規則,(Petal.Width >= 1.8為virginica ,Petal.Length >= 3為versicolor,其它為setosa
技術分享
可見雖然增加了規則但是並沒有提高模型的性能

預測數值型數據

線性回歸

??回歸主要關註一個唯一的因變量(需要預測的值)和一個或多個數值型自變量之間的關系。

  • 如果只有一個自變量,稱為一元線性回歸或者簡單線性回歸,否則,稱為多元回歸。
  • 原理:對線性參數的估計使用最小二乘估計
  • 廣義線性回歸:它們對線性模型進行了兩方面的推廣:通過設定一個連接函數,將響應變量的期望與線性變量相聯系,以及對誤差的分布給出一個誤差函數。這些推廣允許許多線性的方法能夠被用於一般的問題。比如邏輯回歸可以用來對二元分類的結果建模;而泊松回歸可以對整型的計數數據進行建模。
  • 優點:迄今為止,它是數值型數據建模最常用的方法;可適用於幾乎所有的數據;提供了特征(變量)之間關系的強度和大小的估計
  • 缺點:對數據作出了很強的假設;該模型的形式必須由使用者事先指定;不能很好地處理缺失數據;只能處理數值特征,所以分類數據需要額外的處理;需要一些統計學知識來理解模型。
  • LASSO回歸算法:LASSO回歸的特點是在擬合廣義線性模型的同時進行變量篩選(只選擇對因變量有顯著影響的自變量)和復雜度調整(通過參數控制模型復雜度,避免過度擬合)。它通過懲罰最大似然來擬合廣義線性模型,正則化路徑是通過正則化參數lambda的值的網格上計算lasso或者彈性網絡懲戒,lambda越大對變量較多的線性模型的懲罰力度就越大,從而最終獲得一個變量較少的模型。
  • R代碼:
    使用R包glmnet中glmnet()函數擬合LASSO回歸模型
    ??glmnet(x, y, family=c("gaussian","binomial","poisson","multinomial","cox","mgaussian"),
    ????weights, offset=NULL, alpha = 1, nlambda = 100,
    ???? lambda.min.ratio = ifelse(nobs<nvars,0.01,0.0001), lambda=NULL,
    ???? standardize = TRUE, intercept=TRUE, thresh = 1e-07, dfmax = nvars + 1,
    ???? pmax = min(dfmax * 2+20, nvars), exclude, penalty.factor = rep(1, nvars),
    ????lower.limits=-Inf, upper.limits=Inf, maxit=100000,
    ????type.gaussian=ifelse(nvars<500,"covariance","naive"),
    ???? type.logistic=c("Newton","modified.Newton"),
    ???? standardize.response=FALSE, type.multinomial=c("ungrouped","grouped"))

??x: 輸入矩陣,每列表示變量(特征),每行表示一個觀察向量,也支持輸入稀疏矩陣(Matrix中的稀疏矩陣類);
??y: 反應變量,對於gaussian或者poisson分布族,是相應的量;對於binomial分布族,要求是兩水平的因子,或者兩列的矩陣,第一列是計數或者是比例,第二列是靶向分類;對於因子來說,最後的水平是按照字母表排序的分類;對於multinomial分布族,能有超過兩水平的因子。無論binomial或者是multinomial,如果y是向量的話,會強制轉化為因子。對於cox分布族,y要求是兩列,分別是time和status,後者是二進制變兩,1表示死亡,0表示截尾,survival包帶的Surv()函數可以產生這樣的矩陣。對於mgaussian分布族,y是量化的反應變量的矩陣;
??family: 反應類型,參數family規定了回歸模型的類型:family="gaussian"適用於一維連續因變量(univariate)family="mgaussian",適用於多維連續因變量(multivariate),family="poisson"適用於非負次數因變量(count),family="binomial"適用於二元離散因變量(binary),family="multinomial"適用於多元離散因變量(category)
??weights: 權重,觀察的權重。如果反應變量是比例矩陣的話,權重是總計數;默認每個觀察權重都是1;
??offset: 包含在線性預測中的和觀察向量同樣長度的向量,在poisson分布族中使用(比如log後的暴露時間),或者是對於已經擬合的模型的重新定義(將舊模型的因變量作為向量放入offset中)。默認是NULL,如果提供了值,該值也必須提供給predict函數;
??alpha: 彈性網絡混合參數,0 <= a <=1,懲罰定義為(1-α)/2||β||_2^2+α||β||_1.其中alpha等於1是lasso懲罰,alpha等於0是ridge(嶺回歸)的懲罰;
??nlambda:lambda值個數;擬合出n個系數不同的模型
??lambda.min.ratio:lambda的最小值,lambda.max的比例形式,比如全部系數都是0的時候的最小值。默認值依賴於觀察的個數和特征的個數,如果觀察個數大於特征個數,默認值是0.0001,接近0,如果觀察個數小於特征個數,默認值是0.01。在觀察值個數小於特征個數的情況下,非常小的lambda.min.ratio會導致過擬合,在binominal和multinomial分布族性,這個值未定義,如果解釋變異百分比總是1的話程序會自動退出;
??lambda:用戶提供的lambda序列。一個典型的用法基於nlambada和lambda.min.ratio來計算自身lambda序列。如果提供lambda序列,提供的lambda序列會覆蓋這個。需謹慎使用,不要提供單個值給lambda(對於CV步驟後的預測,應使用predict()函數替代)。glmnet依賴於緩慢開始,並且它用於擬合全路徑比計算單個擬合更快;
??standardize:對於x變量是否標準化的邏輯標誌,傾向於擬合模型序列。 系數總是在原有規模返回,默認standardize=TRUE。如果變量已經是同一單位,你可能並不能得到想要的標準化結果。
??intercept:是否擬合截距,默認TRUE,或者設置為0(FALSE)
??thresh:坐標下降的收斂域值,每個內部坐標下降一直進行循環,直到系數更新後的最大改變值比thresh值乘以默認變異要小,默認thresh為1E-7;
??dfmax:在模型中的最大變量數,對於大量的變量數的模型但我們只需要部分變量時可以起到作用;
??pmax:限制非零變量的最大數目;
??exclude:要從模型中排除的變量的索引,等同於一個無限的懲罰因子;
??penalty.factor:懲罰因子,分開的懲罰因子能夠應用到每一個系數。這是一個數字,乘以lambda來允許不同的收縮。對於一些變量來說可以是0,意味著無收縮,默認對全部變量是1,對於列在exlude裏面的變量是無限大。註意:懲罰因子是內部對nvars(n個變量)的和進行重新調整,並且lambda序列將會影響這個改變;
??lower.limits:對於每個系數的更低限制的向量,默認是無窮小。向量的每個值須非正值。也可以以單個值呈現(將會重復),或者是(nvars長度);
??upper.limit:對於每個系數的更高限制的向量,默認是無窮大;
??maxit:所有lambda值的數據最大傳遞數;
??type.gaussian:支持高斯分布族的兩種算法類型,默認nvar < 500使用"covariance“,並且保留所有內部計算的結果。這種方式比"naive"快,"naive"通過對nobs(n個觀察)進行循環,每次內部計算一個結果,對於nvar >> nobs或者nvar > 500的情況下,後者往往更高效;
??type.logistic:如果是"Newton“,會使用準確的hessian矩陣(默認),當用的是"modified.Newton“時,只使用hession矩陣的上界,會更快;
??standardize.response:這個參數時對於"mgaussian“分布族來說的,允許用戶標準化應答變量;
??type.multinomial:如果是"grouped",在多項式系數的變量使用分布lasso懲罰,這樣能確保它們完全在一起,默認是"ungrouped"。

glmnet返回S3類,"glmnet","*","*"可以是elnet,lognet,multnet,fishnet(poisson),merlnet
??call:產生這個對象的調用;
??a0:截距;
??beta:對於elnet, lognet, fishnet和coxnet模型,返回稀疏矩陣格式的系數矩陣(CsparseMatrix),對於multnet和mgaussian模型,返回列表,包括每一類的矩陣;
??lambda:使用的lambda值的實際序列;當alpha=0時,最大的lambda值並不單單等於0系數(原則上labda等於無窮大),相反使用alpha=0.01的lambda,由此導出lambda值;
??dev.ratio:表示由模型解釋的變異的百分比(對於elnet,使用R-sqare)。如果存在權重,變異計算會加入權重,變異定義為2x(loglike_sat-loglike),loglike_sat是飽和模型(每個觀察值具有自由參數的模型)的log似然。因此dev.ratio=1-dev/nulldev;越接近1說明模型的表現越好
??nulldev:NULL變異(每個觀察值),這個定義為2*(loglike_sat-loglike(Null));NULL模型是指截距模型,除了Cox(0 模型);
??df:對於每個lambda的非零系數的數量。對於multnet這是對於一些類的變量數目;
??dfmat:僅適用於multnet和mrelnet。一個包括每一類的非零向量數目的矩陣;
??dim:系數矩陣的維度;
??nobs:觀察的數量;
??npasses:全部lambda值加和的數據的總的通量;
??offset:邏輯變量,顯示模型中是否包含偏移;
??jerr:錯誤標記,用來警告和報錯(很大部分用於內部調試驗)
??而直接顯示的結果有三列,分別是df,%Dev (就是dev.ratio),lambda是每個模型對應的λ值

predict(object,newx,s=NULL,type=c("link","reponse","coefficients","nonzero","class"),exact=FALSE,offset,...)
??coef(object,s=NULL,exact=FALSE)
??object:glmnet返回的對象;
??newx:用來預測的矩陣,也可以是系數矩陣;這個參數不能用於type=c(""coefficents","nonzero");
??s:懲罰參數lambda的值,默認是用來創建模型的全部lambda值;
??type:預測值的類型;"link”類型給"binomial",“multinomial","poisson"或者"cov"模型線性預測的值,對於"gaussian”模型給擬合值。"response"類型,對於"binominal“和"multinomial”給擬合的概率,對於"poisson“,給擬合的均值,對於"cox",給擬合的相對未及;對於"gaussion",response等同於"link“類型。"coefficients"類型對於需求的s值計算系數。註意,對於"binomial”模型來說,結果僅僅對因子應答的第二個水平的類返回。“class"類型僅僅應用於"binomial”和"multinomial“模型,返回最大可能性的分類標簽。"nonzero”類型對每個s中的值返回一個列表,其中包含非0參數的索引;
??exact:這個參數僅僅對於用於預測的s(lambda)值不同於原始模型的擬合的值時,這個參數起到作用。如果exact=FALSE(默認),預測函數使用線性解釋來對給的s(lambda)值進行預測。這時一個非常接近的結果,只是稍微有點粗糙。如果exact=TRUE,這些不同的s值和擬合對象的lambda值進行sorted和merged,在作出預測之前進行模型的重新擬合。在這種情況下,強烈建議提供原始的數據x=和y=作為額外的命名參數給perdict()或者coef(),predict.glmnet()需要升級模型,並且期望用於創建接近它的數據。盡管不提供這些額外的參數它也會運行的很好,在調用函數中使用嵌套序列很可能會中斷。
??offset:如果使用offset參數來擬合,必須提供一個offset參數來作預測。除了類型"coefficients"或者"nonzero“(本文轉載自 ywliao

R語言進行機器學習方法及實例