日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[读书笔记]机器学习:实用案例解析(6)

發(fā)布時間:2025/3/17 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [读书笔记]机器学习:实用案例解析(6) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第6章 ?正則化:文本回歸

線性回歸的非線性擴展:廣義加性模型(GAM, Generalized Additive Model)R語言中可用gam()函數(shù)實現(xiàn)

多項式回歸:degree值不能無限增大,否則會產生過擬合(overfitting)現(xiàn)象。

過擬合:指模型擬合了部分噪聲

避免過擬合的手段:交叉驗證(cross-validation)和正則化(regularization)

模型復雜度:一個模型中特征的權重越大,這個模型越復雜

L1正則化(L1 norm)與L2正則化(L2 norm):分別累加模型系數(shù)的絕對值和系數(shù)的平方

set.seed(1) x <- seq(0, 1, by = 0.01) y <- sin(2 * pi * x) + rnorm(length(x), 0, 0.1) #L1 norm and L2 norm lm.fit <- lm(y ~ x) l2.model.complexity <- sum(coef(lm.fit) ^ 2) l1.model.complexity <- sum(abs(coef(lm.fit)))

  

可以訓練正則化的線性模型的函數(shù):glmnet()

x <- as.matrix(cbind(x, rev(x))) library(glmnet) glmnet(x, y)

  

? ??

結果解釋:

Df:指明模型中的非零權重有幾個(不包括截距項)

%Dev:模型的R2值。第2行對應的是完全正則化,最后一行[55]對應的是完全沒有正則化

Lambda:超參數(shù)(hyperparameter)可以看做是一個懲罰參數(shù),lambda很大時,表明對復雜度很在意,使模型權重趨于0,反之則會得到一個比較復雜的模型

為了得到最優(yōu)模型,要設定一個大小適中的lambda. 為了得到這個lambda,首先設定一個較大的次數(shù),比如10,然后使用不同的lambda分別在測試集上訓練模型,再看效果如何,最后通過迭代多次不同的lambda,找到這個最好的lambda

########################################################

#文本回歸
#研究描述文本與銷量之間的關系

ranks <- read.csv('ML_for_Hackers/06-Regularization/data/oreilly.csv') library(tm) documents <- data.frame(Text = ranks$Long.Desc.) row.names(documents) <- 1:nrow(documents)

  

#將原始數(shù)據(jù)集轉化為一個文檔詞項矩陣

#這里注意,由于tm包更新到0.6-0以后,tolower()等函數(shù)的返回有可能不是dtm的格式(之前版本默認返回相應格式)

#因此書中模型會有一個錯誤

#需要將代碼修改為

corpus <- Corpus(DataframeSource(documents)) corpus <- tm_map(corpus, content_transformer(tolower)) corpus <- tm_map(corpus, content_transformer(stripWhitespace)) corpus <- tm_map(corpus, removeWords, stopwords('english')) dtm <- DocumentTermMatrix(corpus)

  

#將文檔詞項矩陣轉換為一個簡單矩陣,將順序值顛倒過來作為預測值(使權重未正)
#初始化隨機種子
#對于6個lambda值,分別交叉驗證50次,并作圖

x <- as.matrix(dtm) y <- rev(1:100) set.seed(1) performance <- data.frame() for(lambda in c(0.1, 0.25, 0.5, 1, 2, 5)) {for(i in 1:50) {indices <- sample(1:100, 80)training.x <- x[indices, ]training.y <- y[indices]test.x <- x[-indices, ]test.y <- y[-indices]glm.fit <- glmnet(training.x, training.y)predicted.y <- predict(glm.fit, test.x, s = lambda)rmse <- sqrt(mean((predicted.y - test.y) ^ 2))performance <- rbind(performance, data.frame(Lambda = lambda, Iteration = i, RMSE = rmse))} } ggplot(performance, aes(x = Lambda, y = RMSE)) + stat_summary(fun.data = 'mean_cl_boot', geom = 'errorbar') + stat_summary(fun.data = 'mean_cl_boot', geom = 'point')

  

分析:由圖可見,隨著lambda越來越大,模型的表現(xiàn)越來越好,但是lambda增大后是趨于簡化模型,即常數(shù)模型的情況,沒有用到特征的信息。

簡而言之,這個文本回歸模型沒有發(fā)現(xiàn)有意義的信息,給出的預測完全是隨機噪聲。

#########################################################################

  數(shù)據(jù)中也許并沒有答案。有一堆數(shù)據(jù)和對答案的熱切渴望,并不能確保真的能從這堆數(shù)據(jù)中提取出合理的預期答案。

——John Tukey

#########################################################################

將回歸問題轉化為分類問題,采用邏輯回歸的辦法再進行嘗試

#分類辦法:用邏輯值1/0作為分類標準,是否進入前50

#評價模型的標準用錯誤率評價,更多的循環(huán)次數(shù)會對錯誤率有更準確的估計

#代碼優(yōu)化:將兩個循環(huán)交換,不必為每一個lambda做多次拆分,提高運行效率

set.seed(1) performance <- data.frame() for(i in 1:250) {indices <- sample(1:100, 80)training.x <- x[indices, ]training.y <- y[indices]test.x <- x[-indices, ]test.y <- y[-indices]for(lambda in c(0.0001, 0.001, 0.0025, 0.01, 0.025, 0.5, 0.1)) {glm.fit <- glmnet(training.x, training.y, family = 'binomial')predicted.y <- ifelse(predict(glm.fit, test.x, s = lambda) > 0, 1, 0)error.rate <- mean(predicted.y != test.y)performance <- rbind(performance, data.frame(Lambda = lambda, Iteration = i, ErrorRate = error.rate))} } ggplot(performance, aes(x = Lambda, y = ErrorRate)) + stat_summary(fun.data = 'mean_cl_boot', geom = 'errorbar') + stat_summary(fun.data = 'mean_cl_boot', geom = 'point') + scale_x_log10()

  

結果可以看到,將回歸問題改成分類問題時,較小的lambda可以預測一本書能否進入銷售榜前50,是有意義的。

?

總結:有些情況下,手中的數(shù)據(jù)并不能解決較復雜的問題(回歸問題:預測排行),但是卻可以解決一些簡單問題(分類問題:是否進入前50)

參考:http://stackoverflow.com/questions/24191728/documenttermmatrix-error-on-corpus-argument

轉載于:https://www.cnblogs.com/gyjerry/p/5578638.html

總結

以上是生活随笔為你收集整理的[读书笔记]机器学习:实用案例解析(6)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。