Python大規模機器學習》—3.2.4 使用SGD實現大規模SVM

      網友投稿 751 2025-04-01

      3.2.4????使用SGD實現大規模SVM

      考慮到子采樣的局限性(首先是指在大數據集上訓練模型的欠擬合),當使用Scikitlearn中的適合于大規模流的線性SVM時,可用的唯一選項仍然是SGDClassifier和SGDRegressor方法,它們都包含在linear_model模塊中。我們來看看如何以最佳方式使用它們,并改進我們在示例數據集上的結果。

      我們利用本章前面示例中討論的線性和邏輯回歸來將其轉化為高效SVM。至于分類,則需要使用loss超參數來設置損失類型。參數取值為'hinge'、'squared_hinge'和'modified_huber'。前面說明SVM公式時已對這些損失函數做了介紹和討論。

      這么做意味著使用軟邊界的線性SVM(無核函數),這將讓SVM能抵抗誤分類和噪聲數據。但是,也可以使用損失“感知器”,這是一種引起無邊界的hinge loss的損失類型,它適應于處理偏差較大的模型。

      使用hinge loss函數時,必須考慮以下兩方面才能得到最佳結果:

      使用任何損失函數時,隨機梯度下降變得懶惰,僅在示例違反以前定義的邊界時才更新系數向量。這與在對數或平方誤差中的損失函數完全相反,這時實際上每個示例都會用于更新系數向量。如果學習中涉及許多特征,那么這種懶惰方法會產生更稀疏的系數向量,從而減少過擬合。(更密集的向量意味著更多過擬合,因為某些系數可能捕獲比數據信號中更多的噪聲。)

      僅'modified_huber'損失允許概率估計,這使它成為邏輯損失(詳見隨機邏輯回歸)的可行替代方法。經過改進的Huber在處理多類的一對多(OVA)預測時,其多模型概率輸出優于hinge loss的標準決策函數特征(概率比決策函數原始輸出更好,因為其規模相同,在0~1之間)。該損失函數直接從決策函數中估計概率來工作:。

      至于回歸問題,SGDRegressor有兩個SVM損失選項:

      兩者都能啟動線性支持向量回歸,在ε值內的誤差將被忽略(預測殘差)。如果超過ε值

      ,epsilon_insensitive損失會將此錯誤按原樣處理。squared_epsilon_insensitive損失以類似方式運行,因為平凡導致誤差更嚴重,但更大誤差會影響構建更多模型。

      在這兩種情況下,設置正確的epsilon超參數至關重要。作為默認值,Scikitlearn建議epsilon = 0.1,但問題的最佳值必須通過交叉驗證網格搜索來確定,具體過程將在下一段中看到。

      請注意,在回歸損失中,還可使用不啟動SVM優化的'huber'損失,而只是通過從平方切換到線性損失傳遞epsilon參數值距離方式來修改常用的'squared_loss',這樣會對于異常值不敏感。

      在本示例中,我們將重復流過程若干次,以演示如何設置不同超參數和變換特征;我們將使用方便的函數來減少重復的代碼行數量。此外,限制實例數量或算法的容差值可以加快實例運行速度。以這種方式能保持最短訓練和驗證時間,而不會讓你等太久。

      至于方便的包裝函數,第一個將有目的地一次流化部分或全部數據(使用max_rows參數設置限制)。完成流化后,該函數找出所有分類特征的級別并記錄數字的不同范圍。提醒一下,記錄范圍是非常重要的。SGD和SVM算法對不同范圍尺度非常敏感,它們在處理[-1,1]范圍以外的數據時性能較差。

      我們的函數輸出返回兩個已訓練的Scikitlearn對象:DictVectorizer(將字典中的特征范圍轉換為特征向量)和重新縮放[0,1]范圍內的數值變量的MinMaxScaler(用于保持數據集中的值稀疏,從而使得內存使用率降低,并在大多數值為零時實現快速計算)。唯一約束是要求用戶知道用于預測模型的數值和類別變量的特征名,實際上忽略未包含在binary_features或numeric_features參數列表中的特征。如果流沒有特征名,則需要使用fieldnames參數對其命名:

      該代碼能輕松地用于你自己的大規模數據的機器學習應用程序。如果你的數據流是在線數據流(連續數據流)或數據流太長,則通過設置max_rows參數來限制不同的觀察示例數量。

      第二個函數從數據流中提取數據并將其轉換為特征向量,如果提供合適的MinMaxScaler對象而不是None設置,則規范化數字特征:

      有了這兩個函數,現在再次模擬在前一章中提到的第一個回歸問題(即共享單車數據集),但這次使用hinge loss而不是以前使用的均方差。

      第一步,提供要流化的文件名以及一個屬性和數值變量的列表(來自文件標題和文件原始信息),我們的封裝函數代碼將返回某些熱編碼變量和值范圍的相關信息。在這種情況下,大多數變量為二進制,這對稀疏表示來說非常完美,因為數據集中的大多數值都為零:

      從輸出結果不難看出,已使用其變量名將定性變量編碼,并在下劃線后添加其值,然后將其轉換為二進制特征(特征存在時值為1,否則將其設置為零)。請注意,我們一直將SGD模型參數設置為average=True來保證具有更快收斂性(對應于上一章討論的平均隨機梯度下降(ASGD)模型):

      現在處理森林覆蓋類型的分類問題:

      《Python大規模機器學習》—3.2.4 使用SGD實現大規模SVM

      從流中采樣并擬合DictVectorizer和MinMaxScaler對象并得到大量可用實例后,這次使用漸進式驗證開始學習過程(在其訓練前通過對實例測試模型給出錯誤度量),對于代碼中通過sample變量指定的每一批某數量的示例,腳本都會通過顯示最近示例的平均準確度來報告情況:

      在必須處理超過575 000個實例的情況下,

      我們設置在學習50 000個實例后程序提前停止。讀者可根據計算機的效率和時間可用性自由修改這些參數,注意,代碼運行可能需要一些時間。我們在時鐘頻率為2.20GHz的英特爾酷睿i3處理器上的計算時間大約為30分鐘。

      Python 機器學習

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:這個版本是否可以打開power query?如果可以,如何使用(如何打開版本號)
      下一篇:wps表格如何設置日期顏色(wps表格如何設置日期格式)
      相關文章
      亚洲日韩在线观看| 久久精品国产亚洲av品善| 久久亚洲2019中文字幕| 亚洲国产精品日韩专区AV| 亚洲中文字幕乱码AV波多JI| 亚洲一卡二卡三卡| 亚洲国产av高清无码| 亚洲国产成人资源在线软件| 亚洲性一级理论片在线观看| 亚洲精品自拍视频| 亚洲国产精品xo在线观看| 亚洲人成影院在线高清| 亚洲人成日本在线观看| 亚洲av无码片区一区二区三区| 亚洲国产成人久久77| 亚洲av成人综合网| 亚洲综合小说另类图片动图| 亚洲人成网站18禁止| 亚洲av最新在线观看网址| 在线看亚洲十八禁网站| 亚洲?V无码成人精品区日韩| 亚洲国产成人精品91久久久 | 伊在人亚洲香蕉精品区麻豆| 精品亚洲成a人在线观看| 国产在亚洲线视频观看| 亚洲无码视频在线| 亚洲伊人久久大香线蕉综合图片| 亚洲精品一品区二品区三品区| 亚洲国产成人一区二区精品区| 亚洲国产精品久久久久网站| 1区1区3区4区产品亚洲| 亚洲国产模特在线播放| 亚洲另类自拍丝袜第五页 | 亚洲成AV人片在线观看无码 | www亚洲精品久久久乳| 亚洲精品成人a在线观看| 亚洲色婷婷六月亚洲婷婷6月| 亚洲AV永久无码精品一百度影院| 久久亚洲中文字幕精品有坂深雪| 亚洲国产成人超福利久久精品| 亚洲狠狠婷婷综合久久蜜芽|