機器學習問題總結(02)

文章目錄

    • 1.stacking模型以及做模型融合的知識
      • 1.1 從提交結果中融合
      • 1.2 stacking
      • 1.3 blending
    • 2. 怎樣去優化SVM算法模型的?
      • 2.1 SMO優化算法
      • 2.2 libsvm 和 Liblinear
    • 3.現有底層是tensorflow的keras框架,如果現在有一個tensorflow訓練好的模型,keras怎么讀取?
      • 3.1 tf模型的保存與導入
        • 模型保存:
        • 導入預訓練好的模型
    • 4.卷積層為什么能抽取特征? Pool層的作用
      • 4.1 激活函數的種類和特點?
      • 4.2 卷積層為什么能抽取特征?
      • 4.3 **Pool層的作用**
    • 5.LR模型
    • 6.LR模型為什么采用似然估計損失函數
    • 7.了解深度學習嗎?能否講下CNN的特點?
    • 8.說說RBM編碼器
    • 9.進程和線程的區別

1.stacking模型以及做模型融合的知識

模型融合常常是在使用機器學習方法解決問題過程中比較重要的一步,常常是在做完模型優化后面。顧名思義,模型融合就是綜合考慮不同模型的情況,并將它們的結果融合在一起,從而提高模型的性能。

模型融合可以分為:從提交結果文件中融合,stacking和blending

1.1 從提交結果中融合

最簡單的方法就是將不同模型預測的結果直接進行融合,因為這樣做并不需要重新訓練模型,只需要把不同模型的測試結果弄出來,然后采取某種措施得出一個最終結果就ok。
投票機制(voting)是集成學習里面針對分類問題的一種結合策略。基本思想是選擇所有機器學習算法當中輸出最多的那個類。機器學習分類算法的輸出有兩種類型:一種是直接輸出類標簽,另外一種是輸出類概率,使用前者進行投票叫做硬投票(Majority/Hard voting),使用后者進行分類叫做軟投票(Soft voting)。
1).硬投票方法
當多個不同模型直接輸出的是類別的標簽的時候,使用硬投票,直接選擇投票數最多的那個類作為最終的分類結果。
2).軟投票(加權表決融合)
當多個不同模型輸出的是屬于某個類別的概率的時候,就使用軟投票的方法,對相同的類別概率進行疊加,最終選出概率值最大的那個類別為分類的結果。
3). 對結果取平均
當我們面對的問題是回歸問題的時候,我們就通過對不同模型的預測結果求平均當做融合模型的結果。

1.2 stacking

Stacking的基本思想是用一些基分類器進行分類,然后使用另一個分類器對結果進行整合。
例子:2-fold stacking
1.將訓練集分成兩個不相交的集合
2.使用第一個集合訓練基分類器
3.在訓練好的基分類器上對第二個集合做預測
4.將第三步得到的預測結果作為高層(融合分類器)分類器的輸入,正確的標簽作為輸出,訓練高層的分類器。

Stacking的模型可以在特征空間上獲取更加多的信息,因為第二階段模型是以第一階段模型的預測值會作為特征。
è??é?????????‰????è?°

è??é?????????‰????è?°

相比于bagging和boosting方法,stacking方法的區別

  • bagging主要用于減少方差
  • boosting方法主要用于減少方差
  • stacking方法既可以減少方差也可以減少偏差

1.3 blending

Blending與Stacking大致相同,只是Blending的主要區別在于訓練集不是通過K-Fold的CV策略來獲得預測值從而生成第二階段模型的特征,

而是建立一個Holdout集,例如說10%的訓練數據,第二階段的stacker模型就基于第一階段模型對這10%訓練數據的預測值進行擬合。說白了,就是把Stacking流程中的K-Fold CV(相當于把樣本全過了一遍) 改成 HoldOut CV(一開始就直接分好)。

優點

  • 比stacking簡單(因為不用進行k次的交叉驗證來獲得stacker feature)
  • 避開了一個信息泄露問題:generlizers和stacker使用了不一樣的數據集
  • 在團隊建模過程中,不需要給隊友分享自己的隨機種子
    缺點
  • 使用了很少的數據(第二階段的blender只使用training set10%的量)
  • blender可能會過擬合(其實大概率是第一點導致的)
  • stacking使用多次的CV會比較穩健

對于實踐中的結果而言,stacking和blending的效果是差不多的,所以使用哪種方法都沒什么所謂,完全取決于個人愛好。

2. 怎樣去優化SVM算法模型的?

2.1 SMO優化算法

SMO算法是支持向量機的快速算法,不斷的將原二次規劃問題分解為只有兩個變量的二次規劃子問題求解,直到所有變量滿足KTT條件,這樣通過啟發式的方法得到原二次規劃問題的最優解。

2.2 libsvm 和 Liblinear

LIBSVM是臺灣大學林智仁(Lin Chih-Jen)教授等開發設計的一個簡單、易于使用和快速有效的SVM模式識別與回歸的軟件包,他不但提供了編譯好的可在Windows系列系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操作系統上應用;該軟件對SVM所涉及的參數調節相對比較少,提供了很多的默認參數,利用這些默認參數可以解決很多問題;并提供了交互檢驗(Cross Validation)的功能。該軟件可以解決C-SVM、ν-SVM、ε-SVR和ν-SVR等問題,包括基于一對一算法的多類模式識別問題。

Libsvm和Liblinear都是國立臺灣大學的Chih-Jen Lin博士開發的,Libsvm主要是用來進行非線性svm 分類器的生成,提出有一段時間了,而Liblinear則是去年才創建的,主要是應對large-scale的data classification,因為linear分類器的訓練比非線性分類器的訓練計算復雜度要低很多,時間也少很多,而且在large scale data上的性能和非線性的分類器性能相當,所以Liblinear是針對大數據而生的。

有關Liblinear和Libsvm各自的優勢可以歸納如下:

1.libsvm用來就解決通用典型的分類問題

2.liblinear主要為大規模數據的線性模型設計

3.現有底層是tensorflow的keras框架,如果現在有一個tensorflow訓練好的模型,keras怎么讀取?

  • 直接通過API讀取tensflow的模型文件
  • keras.models.load_model(‘my_model.h5’
  • 不同深度學習框架模型的轉換可以使用微軟的MMdnn。

3.1 tf模型的保存與導入

模型保存:

saver = tf.train.Saver()
saver.save(sess, 'my_test_model')

主要有2個文件

  • meta graph(.meta結尾)
    這是一個 protocol buffer,保存了完整的 Tensorflow 圖,即所有變量、操作和集合等。擁有一個.meta的擴展名。

  • checkpoint file(.ckpt結尾)
    這是一個二進制文件包含了所有權重、偏置、梯度和其他變量的值。這個文件有一個.ckpt的擴展名。在0.11版本以前只有一個文件,現在有兩個。

導入預訓練好的模型

如果你想用別人預訓練好的模型進行fine-tuning,有兩件事情需要做。

  • 創造網絡
    你可以通過python寫好和原來模型一樣的每一層代碼來創造網絡,可是,仔細一想,我們已經通過.metaa把網絡存儲起來,我們可以用來再創造網絡使用tf.train.import()語句。
saver = tf.train.import_meta_graph('my_test_model-1000.meta')
  • 加載參數
    我們可以恢復網絡的參數,通過使用saver,它是tf.train.Saver()類的一個實例。
with tf.Session() as sess:new_saver = tf.train.import_meta_graph('my_test_model-1000.meta')new_saver.restore(sess, tf.train.latest_checkpoint('./'))

4.卷積層為什么能抽取特征? Pool層的作用

4.1 激活函數的種類和特點?

  • sigmoid 、反正切tanh 都有梯度消失問題

  • relu 快,問題:負值0梯度
    1.sigmoid

  • Sigmoid(也叫邏輯激活函數) 非線性激活函數的形式是,其圖形如上圖左所示。之前我們說過,sigmoid函數輸入一個實值的數,然后將其壓縮到0~1的范圍內。特別地,大的負數被映射成0,大的正數被映射成1。sigmoid function在歷史上流行過一段時間因為它能夠很好的表達“激活”的意思,未激活就是0,完全飽和的激活則是1。而現在sigmoid已經不怎么常用了,主要是因為它有兩個缺點:

  • Sigmoids saturate and kill gradients. Sigmoid容易飽和,并且當輸入非常大或者非常小的時候,神經元的梯度就接近于0了,從圖中可以看出梯度的趨勢。這就使得我們在反向傳播算法中反向傳播接近于0的梯度,導致最終權重基本沒什么更新,我們就無法遞歸地學習到輸入數據了。另外,你需要尤其注意參數的初始值來盡量避免saturation的情況。如果你的初始值很大的話,大部分神經元可能都會處在saturation的狀態而把gradient kill掉,這會導致網絡變的很難學習。

  • Sigmoid outputs are not zero-centered. Sigmoid 的輸出不是0均值的,這是我們不希望的,因為這會導致后層的神經元的輸入是非0均值的信號,這會對梯度產生影響:假設后層神經元的輸入都為正(e.g. x>0 elementwise in ),那么對w求局部梯度則都為正,這樣在反向傳播的過程中w要么都往正方向更新,要么都往負方向更新,導致有一種捆綁的效果,使得收斂緩慢。 當然了,如果你是按batch去訓練,那么每個batch可能得到不同的符號(正或負),那么相加一下這個問題還是可以緩解。因此,非0均值這個問題雖然會產生一些不好的影響,不過跟上面提到的 kill gradients 問題相比還是要好很多的。

2.tanh


Tanh和Sigmoid是有異曲同工之妙的,它的圖形如上圖右所示,不同的是它把實值得輸入壓縮到-1~1的范圍,因此它基本是0均值的,也就解決了上述Sigmoid缺點中的第二個,所以實際中tanh會比sigmoid更常用。但是它還是存在梯度飽和的問題。Tanh是sigmoid的變形.

3.relu: f(x)=max(0,x)
è??é?????????‰????è?°

近年來,ReLU 變的越來越受歡迎。它的數學表達式是: f(x)=max(0,x)。很顯然,從上圖左可以看出,輸入信號
<0時,輸出為0,>0時,輸出等于輸入。ReLU的優缺點如下:

  • 優點1:Krizhevsky et al. 發現使用 ReLU 得到的SGD的收斂速度會比 sigmoid/tanh 快很多(如上圖右)。有人說這是因為它是linear,而且梯度不會飽和
  • 優點2:相比于 sigmoid/tanh需要計算指數等,計算復雜度高,ReLU 只需要一個閾值就可以得到激活值。
  • 缺點1: ReLU在訓練的時候很”脆弱”,一不小心有可能導致神經元”壞死”。舉個例子:由于ReLU在x<0時梯度為0,這樣就導致負的梯度在這個ReLU被置零,而且這個神經元有可能再也不會被任何數據激活。如果這個情況發生了,那么這個神經元之后的梯度就永遠是0了,也就是ReLU神經元壞死了,不再對任何數據有所響應。實際操作中,如果你的learning rate 很大,那么很有可能你網絡中的40%的神經元都壞死了。 當然,如果你設置了一個合適的較小的learning rate,這個問題發生的情況其實也不會太頻繁。
  1. Leaky ReLU
    è??é?????????‰????è?°
    Leaky ReLUs 就是用來解決ReLU壞死的問題的。和ReLU不同,當x<0時,它的值不再是0,而是一個較小斜率(如0.01等)的函數。也就是說f(x)=1(x<0)(ax)+1(x>=0)(x),其中a是一個很小的常數。這樣,既修正了數據分布,又保留了一些負軸的值,使得負軸信息不會全部丟失。關于Leaky ReLU 的效果,眾說紛紜,沒有清晰的定論。有些人做了實驗發現 Leaky ReLU 表現的很好;有些實驗則證明并不是這樣。

激活函數的作用:非線性。

4.2 卷積層為什么能抽取特征?

  • 卷積層負責提取特征,采樣層負責特征選擇,全連接層負責分類
  • 卷積神經網絡的特點就是權重共享,利用不同的卷積核對輸入的圖像進行卷積,可以得到一張張特征圖
    多種濾波器和對應的濾鏡效果,比如邊緣檢測、銳化、均值模糊、高斯模糊
    è??é?????????‰????è?°

4.3 Pool層的作用

  • pooling確實起到了整合特征的作用
  • pooling的結果是使得特征減少,參數減少,但pooling的目的并不僅在于此
  • pooling目的是為了保持某種不變性(旋轉、平移、伸縮等),常用的有mean-pooling,max-pooling和Stochastic-pooling(隨機池化)三種

5.LR模型

  • 在線性回歸的基礎上加了sigmoid函數,所以變成了分類模型,輸出可以表示概率。

  • 采用似然估計構造目標函數,目標是優化最大似然估計,公式H(x)=-(ylogf(x)+(1-y)log(1-f(x)),一般優化方法采用的是梯度下降法

6.LR模型為什么采用似然估計損失函數

  • 最小二乘法反映的是線性空間上的線性投影的最短距離,在非線性空間上表現不如MLE。(MLE可以看作一種特殊情況下的Bayesian 估計)
  • 如果采用均方差損失函數的時候,梯度下降求偏導時會有一項導數項,這樣會導致梯度在一定階段會收斂的特別慢,而對數損失函數log正好能和sigmoid的exp抵消掉,會加快收斂速度。
  • 最小二乘法是高斯分布下最大似然估計的一般結果,LR是伯努利分布下最大似然估計的一般結果(交叉熵損失),所以兩者本質上都是最大似然估計。

7.了解深度學習嗎?能否講下CNN的特點?

CNN,特點是局部感受和權值共享
通過卷積核掃描原始數據能夠學習到不同的局部的特征,接著通過池化進一步提取特征,這些做的能夠讓參數數目有量級的減少,同時權值共享是同一層隱含層共享權值,這樣也是減少了隱含層的參數,很多卷積核學習的到特征最后傳遞到下一層網絡,到最后一層采用分類器分類

深度學習解決了以往神經網絡深度網絡很多問題,
梯度消失爆炸問題,幾個方面:

  • 是激活函數不光是只用sigmoid函數,還有 ReLU函數
  • 是在參數并不是初始化的時候并不是隨機選擇的,而是在前面有自編碼器做了預訓練,這樣避免了梯度下降法求解陷入局部最優解;
  • 深度學習一些手段,權值共享,卷積核,pooling等都能抑制梯度消失問題
  • 二次代價函數換成交叉熵損失函數或者選用softmax+對數似然代價函數的組合

8.說說RBM編碼器

RBM包括隱層,可見層和偏置層。可見層和隱含層可以雙向傳播。標準的RBM,隱含層和可見層都是二進制表示,既激活函數的激活值服從二項分布。每一層的節點沒有鏈接,如果假設所有的節點都只能取0或者1,同時全概率分布p(v,h)滿足伯努利分布。

參數:

  • 可視層和隱含層之間的權重矩陣
  • 可視節點的偏移量
  • 隱含層的偏移量
    應用
  • 降維,類似稀疏自編碼器
  • 用RBM訓練得到的權重舉證和偏移量作為BP神經網路的初始值,避免陷入局部極小值
  • 可以估計聯合分布P(v,h),進而求出p(h|v)。生成式模型
  • 直接計算p(h|v)進行分類。判別式模型

9.進程和線程的區別

有一個是進程的開銷比線程大,通信麻煩一些,但更安全,所以很多時候我們用多線程加速,但有時候線程用不了,只能用進程

python:為了加速嘗試過很多方法,比如GPU加速、C++動態庫調用、還有就是多進程。

為什么要用多進程加速。

  • 因為python這個語言是解釋型語言,本來用來進行cpu密集型計算就不適合,
  • 還有就是python沒有類型,因為全是用哈希表實現的動態內存分配方式,比如你定義a = 2 ,其實底層的實現是先分配一個內存塊,在用一個指針指向這個內存塊,最后返回的是這個指針
  • 最重要的一點是當初在設計python的時候,為了圖簡單,加了一個全局鎖,也就是一個時刻只能使用一個線程,多核完全浪費了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445200.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445200.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445200.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python對操作系統的目錄和文件操作

一、獲取當前目錄下的特定文件列表>>>import glob,os>>>curdir os.getcwd() #獲取當前目錄>>>os.chdir(workdir) #設置當前目錄>>>dir glob.glob(*.dat) #獲取當前目錄的dat文件列表>>>os.chdir(curdir) #…

常見漏洞

Cookie without HttpOnly flag set 如果在Cookie上設置了HttpOnly屬性&#xff0c;則客戶端JavaScript無法讀取或設置Cookie的值。 這種措施通過阻止某些客戶端攻擊&#xff08;例如跨站點腳本&#xff09;&#xff0c;通過阻止它們通過注入的腳本來簡單地捕獲cookie的值&…

python函數星號參數

2011-09-01 17:35 2人閱讀 評論(0) 收藏 編輯 刪除 今天有個工作是導出一個函數給腳本用 我自已先要測一下 先要客戶端發送一個消息給服務器 看了下C部分的代碼,如下 "def onNetMessage(self,playerID, msgName,msgParam):\n" //客戶端調用服務器腳本 " …

MachineLearning(3)-流型

流型-manifold在很多機器學習的文章中會見到“嵌入在高維空間的低維流型”這樣的字眼&#xff0c;下記錄一些重要概念。參考資料&#xff1a;https://blog.csdn.net/sinat_32043495/article/details/789977581.流型 局部具有歐幾里得空間性質的空間&#xff08;流型就是一個空間…

C/C++常見面試題(四)

C/C面試題集合四 目錄 1、什么是C中的類&#xff1f;如何定義和實例化一個類&#xff1f; 2、請解釋C中的繼承和多態性。 3、什么是虛函數&#xff1f;為什么在基類中使用虛函數&#xff1f; 4、解釋封裝、繼承和多態的概念&#xff0c;并提供相應的代碼示例 5、如何處理內…

機器學習問題總結(03)

文章目錄1.struct和class區別&#xff0c;你更傾向用哪個2.kNN&#xff0c;樸素貝葉斯&#xff0c;SVM的優缺點&#xff0c;各種算法優缺點2.1 KNN算法2.2 樸素貝葉斯2.3SVM算法2.4 ANN算法2.5 DT算法3. 10億個整數&#xff0c;1G內存&#xff0c;O(n)算法&#xff0c;統計只出…

python源代碼現成重用大全

Nullege is a search engine for Python source code. http://nullege.com/

redis——新版復制

sync雖然解決了數據同步問題&#xff0c;但是在數據量比較大情況下&#xff0c;從庫斷線從來依然采用全量復制機制&#xff0c;無論是從數據恢復、寬帶占用來說&#xff0c;sync所帶來的問題還是很多的。于是redis從2.8開始&#xff0c;引入新的命令psync。 psync有兩種模式&a…

Python(23)-面向對象2-繼承,多態

面向對象基本概念2--繼承、多態1.繼承基本概念2.子類重寫父類方法2.1完全重寫2.2擴展父類方法--super()3.多繼承4.新式類和舊式類5.多態基本概念6.類屬性、類方法-classmethod6.1類屬性6.2類方法classmethod7.靜態方法staticmethod8.案例分析本系列博文來自學習《Python基礎視頻…

Linux Linux 集群

Linux 集群 Page navigation 什么是集群?集群分類基于 Linux 的集群Linux 服務器集群系統Linux 高性能計算集群集群系統 MOSIX構建 Linux 集群IBM 與 Linux 集群 本專題收集了 Linux 集群相關的文章和教程。 什么是集群? 簡單的說&#xff0c;集群&#xff08;cluster&#x…

機器學習問題總結(04)

文章目錄1、MLP的BP過程2、maxpool層BP怎么做的2.1 **mean pooling**2.2 max pooling3、opencv遍歷像素的方式&#xff0c;講兩種&#xff1f;4、傳統圖像處理有了解過嗎&#xff0c;比如去噪 特征提取5、問在linux下寫過代碼嗎&#xff1f; 問用了什么軟件工具6、LDA&#xff…

持續更新的Zookeeper知識總結

簡介 Zookeeper為分布式應用 提供了高效且可靠的分布式協調服務&#xff0c;提供了諸如統一命名服務、發布訂閱、負載均衡、配置管理和分布式鎖等分布式的基礎服務。 設計目標是將那些復雜且容易出錯的分布式一致性服務封裝起來&#xff0c;構成一個高效可靠的原語集&#xf…

Python(24)-面向對象3-可迭代類對象Pokemon

面向對象3-Pokemon demo1.可迭代類對象1.可迭代類對象 想要實現類對象中某些屬性/數值的迭代訪問&#xff0c;需要在類中定義一個__iter__()方法&#xff0c;和__next__() 的方法(python 2 中為next()方法)。 _iter_()返回值是self&#xff0c; _next_()中遍歷完所有的元素后發…

機器學習問題總結(05)

文章目錄1. Hadoop、Spark1.1 hadoop1.2 spark1.3 MapReduce1.3.1 概念1.3.1 MapReduce執行流程2、機器學習場景3、推薦系統&#xff08;預測電影等級&#xff09;4、CTR&#xff08;點擊通過率 -> 廣告&#xff09;5、SVM5.1 svm的原理5.2 SVM的核技巧6、K-means6.1 K-mean…

基于Socket的UDP和TCP編程介紹

一、概述 TCP(傳輸控制協議)和UDP(用戶數據報協議是網絡體系結構TCP/IP模型中傳輸層一層中的兩個不同的通信協議。 TCP:傳輸控制協議,一種面向連接的協議,給用戶進程提供可靠的全雙工的字節流,TCP套接口是字節流套接口(streamsocket)的一種。 UDP:用戶數據報協議。U…

Python(25)-單例設計模式

單例設計模式1.單例設計模式2.__new__方法3.初始動作只執行一次本系列博文來自學習《Python基礎視頻教程》筆記整理&#xff0c;視屏教程連接地址&#xff1a;http://yun.itheima.com/course/273.html1.單例設計模式 設計模式&#xff1a;不同的問題使用不同的解決套路。學習設…

Linux Socket通信 C/S模型

代碼片段(8) [代碼] MySocket.h 01#ifndef _MYSOCKET_0623_H 02#define _MYSOCKET_0623_H 03 04#include <sys/socket.h> 05#include <sys/types.h> 06#include <arpa/inet.h> 07#include <netinet/in.h> 08#include <sys/wait.h> 09#include &…

Java多線程——基本概念

線程和多線程 程序&#xff1a;是一段靜態的代碼&#xff0c;是應用軟件執行的藍本 進程&#xff1a;是程序的一次動態執行過程&#xff0c;它對應了從代碼加載、執行至執行完畢的一個完整過程&#xff0c;這個過程也是進程本身從產生、發展至消亡的過程 線程&#xff1a;是比…

textCNN初探

文章目錄目錄1.什么是textCNN1.1 textCNN 提出的背景1.2 textCNN 合理性分析2.textCNN相比于傳統圖像領域的CNN有什么特點&#xff1f;3.textCNN例子講解3.1 參數和超參數3.2 textCNN的數據3.3 textCNN的網絡結構定義3.4 代碼目錄 1.什么是textCNN 1.1 textCNN 提出的背景 我…

Python(28)-異常

異常1.拋出異常2.捕獲異常3.依據錯誤類型捕獲異常4.捕獲未知錯誤5.異常捕獲的完整語法6.異常傳遞7.主動拋出異常本系列博文來自學習《Python基礎視頻教程》筆記整理&#xff0c;視屏教程連接地址&#xff1a;http://yun.itheima.com/course/273.html1.拋出異常 拋出異常&#…