本文目錄一覽:
- 1、cv.crearimage 這個函數可以用cv2中的哪個函數替代
- 2、python如何繪製預測模型校準圖
- 3、2019-03-02
- 4、python機器學習庫怎麼使用
- 5、python opencv怎麼創建一個cascadeobjectdetector對象
- 6、python+opencv 怎麼實現一個和vision.cascadeobjectdetector一樣的對象
cv.crearimage 這個函數可以用cv2中的哪個函數替代
(1)cvLoadImage()函數
含義:是從磁碟中載入圖像的函數;
函數原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );
第一個參數:filename :要被讀入的文件的文件名(包括後綴);
這裡要特別注意(有三種讀入方法)
1,直接從任意磁碟中讀取圖片,必須是是絕對路徑,遇到反斜杠的時候變成兩個反斜杠,例如「G:\\Image\\1.jpg」;
2,將圖片直接放在工程文件夾下面即可,與debug文件同級,例如”.\\face2.jpg”;
3,可以利用命令行參數添加文件的路徑引用(這裡不詳述)
第二個參數:指定讀入圖片的顏色和深度。這裡的color有幾個值可以選擇
這裡注意(有兩種方法)
1,利用變數。
CV_LOAD_IMAGE_COLOR 默認情況下,圖像是以8位,3個通道的形式被讀入(默認也使得圖像強制轉換為3通道)
CV_LOAD_IMAGE_GRAYSCALE 強制轉換為單通道
CV_LOAD_IMAGE_ANGCOLOR 則以保持原始圖像通道數的方式讀入
CV_LOAD_IMAGE_ANYDEPTH ???這個含義好像使讀入的圖像為16點陣圖像
CV_LOAD_IMAGEUNCHANGED 使得讀入圖像的通道數和位數與原始圖像保持一致
2,利用數字代替參變數。
-1 默認讀入圖像的原通道數
0 強制轉換為灰度圖
1 讀入彩色圖
(2)cvCreateImage()函數
含義 :創建首地址並分配存儲空間
函數原型:IplImage* cvCreateImage( CvSize size, int depth, int channels );
第一個參數:size 圖像的寬和高
這個參數的設置也有好幾種方式
1 :IplImage* Image = cvLoadImage(“G:\\Image\\1.jpg”,1);//讀入一張彩色圖
CvSize grayImageSize;
grayImageSize.width = Image-width;
grayImageSize.height = Image-height;
IplImage*grayImage =cvCreateImage(grayImageSize,Image-depth,1); //開闢一個Image圖像相同的內存
cvCvtColor(Image,grayImage,GRAY2RGB); //將彩色圖Image,轉換為灰度圖grayImage
2: IplImage*grayImage =cvCreateImage(CvSize(Image-width,Image-height),Image-depth,1);
3: IplImage*grayImage =cvCreateImage(CvSize(cvGetSize(Image)),Image-depth,1);
第二個參數 :圖像元素的深度,可以是下面的其中之一
IPL_DEPTH_8U – 無符號8位整型
IPL_DEPTH_8S – 有符號8位整型
IPL_DEPTH_16U – 無符號16位整型
IPL_DEPTH_16S – 有符號16位整型
IPL_DEPTH_32S – 有符號32位整型
IPL_DEPTH_32F – 單精度浮點數
IPL_DEPTH_64F – 雙精度浮點數
第三個參數:channels 每個元素(像素)通道數.可以是 1, 2, 3 或 4.通道是交叉存取的,
例如通常的彩色圖像數據排列是:b0 g0 r0 b1 g1 r1 … 雖然通常 IPL 圖象格式可以存貯非交叉存取的圖像,並且一些OpenCV 也能
處理他, 但是這個函數只能創建交叉存取圖像.。
python如何繪製預測模型校準圖
python繪製預測模型校準圖可以使用校準曲線,因為預測一個模型校準的最簡單的方法是通過一個稱為「校準曲線」的圖(也稱為「可靠性圖」,reliability diagram)。
這個方法主要是將觀察到的結果通過概率劃分為幾類(bin)。因此,屬於同一類的觀測值具有相近的概率。
對於每個類,校準曲線將預測這個類的平均值,然後將預測概率的平均值與理論平均值(即觀察到的目標變數的平均值)進行比較。
你只需要確定類的數量和以下兩者之間的分類策略即可:
1、「uniform」,一個0-1的間隔被分為n_bins個類,它們都具有相同的寬度。
2、「quantile」,類的邊緣被定義,從而使得每個類都具有相同數量的觀測值。
假設你的模型具有良好的精度,則校準曲線將單調增加。但這並不意味著模型已被正確校準。實際上,只有在校準曲線非常接近等分線時(即下圖中的灰色虛線),您的模型才能得到很好的校準,因為這將意味著預測概率基本上接近理論概率。
python繪製預測模型中如何解決校準錯誤:
假設你已經訓練了一個分類器,該分類器會產生準確但未經校準的概率。概率校準的思想是建立第二個模型(稱為校準器),校準器模型能夠將你訓練的分類器「校準」為實際概率。
因此,校準包括了將一個一維矢量(未校準概率)轉換為另一個一維矢量(已校準概率)的功能。
兩種常被用作校準器的方法:
1、保序回歸:一種非參數演算法,這種非參數演算法將非遞減的自由格式行擬合到數據中。行不會減少這一事實是很重要的,因為它遵從原始排序。
2、邏輯回歸:現在有三種選擇來預測概率:普通隨機森林、隨機森林 + 保序回歸、隨機森林 + 邏輯回歸。
2019-03-02
集成學習: 構建並結合多個學習器來完成學習任務。
同質: 集成中只包含同種類型的個體學習器(基學習器);
異質: 集成中的個體學習器(組件學習器)由不同學習演算法生成。
個體學習器的「準確性」和「多樣性」很重要,且相互衝突。
分類: 個體學習器間存在強依賴關係,必須串列生成的序列化方法,eg,Boosting;個體學習器間不存在強依賴關係,可同時生成的並行化方法,eg,Bagging和隨機森林。
工作機制: 先從初始訓練集訓練出一個基學習器1,根據基學習器誤差率表現更新訓練樣本權重,使弱學習器1學習誤差率高的訓練樣本權重變高,讓這些點在弱學習器2中得到更多的重視,然後基於調整權重後的訓練集訓練學習器2,…重複進行,直至弱學習器數目達到指定的值T,最終將這T個基學習器進行加權結合。
Boosting族演算法最著名的代表是AdaBoost,是「Adaptive Boosting(自適應增強)」的縮寫。它的自適應在於:前一個基本分類器分錯的樣本會得到加強,加權後的全體樣本再次被用來訓練下一個基本分類器。同時,在每一輪中加入一個新的弱分類器,直到達到某個預定的足夠小的錯誤率或達到預先指定的最大迭代次數。
演算法過程
優點:作為分類器時精度很高;在AdaBoost框架下,可使用各種回歸分類模型來構建學習器;不易發生過擬合(會加入正則化項)。
缺點:對異常樣本點敏感,異常樣本在迭代中可能會獲得較高的權重,影響最終的強學習器的預測準確性。
兩者均是0/1誤差的平滑近似:
梯度提升演算法首先給定一個目標損失函數,它的定義域是所有可行的基函數集合,提升演算法通過迭代的選擇一個負梯度方向上的基函數來逐漸逼近局部最小值。
GB每一次建立模型 是在之前建立模型 損失函數的梯度下降方向。一般認為損失函數越小,性能越好,因此最好是使損失函數沿著梯度方向下降,模型得以不斷改進提升性能。
GBDT是GB和DT的結合,是以決策樹為基學習器的gb演算法,此處的決策樹是回歸樹。GBDT中的決策樹深度一般不超過5,葉子結點數不超過10。GBDT核心在於: 每一棵樹學得是之前所有樹結論和的殘差 ,這個殘差就是一個加預測值後能得真實值的累加量。比如A的真實年齡是18歲,但第一棵樹的預測年齡是12歲,差了6歲,即殘差為6歲。那麼在第二棵樹里我們把A的年齡設為6歲去學習,如果第二棵樹真的能把A分到6歲的葉子節點,那累加兩棵樹的結論就是A的真實年齡;如果第二棵樹的結論是5歲,則A仍然存在1歲的殘差,第三棵樹里A的年齡就變成1歲,繼續學習。
xgboost是在GBDT基本思路上改善而來,主要改變有
1) 在損失函數中加入防止過擬合的懲罰函數
T是葉子的個數,w是預測函數的參數,也就是決策樹演算法下葉子節點的權重值。可以控制γ和λ這兩個超參數來調整正則化的懲罰力度。其實這裡的懲罰函數也就定義了模型複雜度,比如γ越大,λ越大,複雜度越小越不易過擬合。
2) 用二階泰勒展式將損失函數展開,同時用到了一階和二階導數
第t次的loss:
對上式做二階泰勒展開:g為一階導數,h為二階導數
3)CART回歸樹中尋找最佳分割點的衡量標準是最小化均方差,xgboost 尋找分割點的標準是最大化 ,lamda,gama與正則化項相關
xgboost演算法的步驟和GB基本相同,都是首先初始化為一個常數,gb是根據一階導數ri,xgboost是根據一階導數gi和二階導數hi,迭代生成基學習器,相加更新學習器。
為得到泛化性能強的集成,集成中的個體學習器應儘可能相互獨立,考慮使用相互有交疊的採樣子集。
並行式集成學習的最著名代表,基於自助採樣法,演算法流程如下:
優點:訓練一個Bagging集成與直接使用基學習演算法訓練一個學習器的複雜度同階;與標準AdaBoost只適用於二分類任務不同,Bagging能不經修改的用於多分類、回歸任務;初始訓練集63.2%用於訓練,36.8%用作驗證集對泛化性能做「包外估計」。
但從偏差-方差分解角度看,Bagging主要關注降低方差。
隨機森林是Bagging的一個擴展變體,在以決策樹為基學習器構建Bagging集成的基礎上,在決策樹訓練過程中引入了 隨機屬性選擇 。即對基決策樹的每個結點,先從該結點的屬性集合中隨機選擇一個包含k(kd,d為所有屬性個數)個屬性的子集,然後從中選一個最優屬性用於劃分。若k=d,則為傳統決策樹;k=1,則隨機選擇一個屬性劃分。一般推薦 。
RF起始性能相對較差,但隨著學習器數目的增加,會收斂到更低的泛化誤差。另外RF的訓練效率常優於Bagging,因為Bagging使用「確定型」決策樹,選擇劃分屬性時要對結點所有屬性進行考察,而RF使用「隨機型」決策樹,只需考慮一個屬性子集。
學習器結合可能會從三個方面帶來好處:
1)統計方面:當多個假設達到同等性能時,可減小因誤選單學習器導致泛化性能不佳的風險;
2)計算方面:降低陷入糟糕局部極小點的風險;
3)表示方面:擴大相應假設空間,學習更好的近似。
對數值型輸出 ,最常見的結合策略是平均法。
簡單平均:
(特殊的加權平均法,宜在個體學習器性能相近時使用)
加權平均法:
其中 是個體學習器 的權重,一般從訓練數據中學習而得,通常要求 ,宜在個體學習器相差較大時使用。
對分類任務,學習器從類別標記集合中預測出一個標記,最常見的結合策略是投票法。
絕大多數投票法:
相對多數投票法:
預測為得票最多的標記,若同時有多個標記獲得最高票,則從中隨機選取一個。
加權投票法:
與加權平均法類似, 是 的權重,通常 。
個體學習器的輸出類型:
類標記: 硬投票。 ,若 將樣本x預測為類別 則取值為1,否則為0。
類概率: 軟投票。 ,相當於對後驗概率 的一個估計。
不同類型的 值不能混用;對一些能在預測出類別標記的同時產生分類置信度的學習器,其分類置信度可轉化為類概率使用;分類置信度應規範化後使用;基於類概率進行結合優於直接基於類標記進行結合;若基學習器類型不同,不能直接比較類概率值,應先將其轉化為類標記輸出(eg類概率輸出最大的設為1,其他為0)再投票。
當訓練數據很多時,常使用通過另一個學習器來進行結合的「學習法」,代表演算法Stacking
第一階段獲得各個模型對樣本x1的預測標籤值;第二階段將各個模型的預測標籤值作為一個新的特徵(x1的真實標籤值還是標籤值),再用某個演算法進行訓練,獲得一個融合模型,用這個融合模型進行測試集的預測。
周志華《機器學習》
python機器學習庫怎麼使用
1. Scikit-learn(重點推薦)
www .github .com/scikit-learn/scikit-learn
Scikit-learn 是基於Scipy為機器學習建造的的一個Python模塊,他的特色就是多樣化的分類,回歸和聚類的演算法包括支持向量機,邏輯回歸,樸素貝葉斯分類器,隨機森林,Gradient Boosting,聚類演算法和DBSCAN。而且也設計出了Python numerical和scientific libraries Numpy and Scipy2、Keras(深度學習)
Keras是基於Theano的一個深度學習框架,它的設計參考了Torch,用Python語言編寫,是一個高度模塊化的神經網路庫,支持GPU和CPU。
3、Lasagne(深度學習)
不只是一個美味的義大利菜,也是一個和Keras有著相似功能的深度學習庫,但其在設計上與它們有些不同。
4.Pylearn2
www .github .com/lisa-lab/pylearn2
Pylearn是一個讓機器學習研究簡單化的基於Theano的庫程序。它把深度學習和人工智慧研究許多常用的模型以及訓練演算法封裝成一個單一的實驗包,如隨機梯度下降。
5.NuPIC
www .github .com/numenta/nupic
NuPIC是一個以HTM學習演算法為工具的機器智能平台。HTM是皮層的精確計算方法。HTM的核心是基於時間的持續學習演算法和儲存和撤銷的時空模式。NuPIC適合於各種各樣的問題,尤其是檢測異常和預測的流數據來源。
6. Nilearn
www .github .com/nilearn/nilearn
Nilearn 是一個能夠快速統計學習神經影像數據的Python模塊。它利用Python語言中的scikit-learn 工具箱和一些進行預測建模,分類,解碼,連通性分析的應用程序來進行多元的統計。
7.PyBrain
www .github .com/pybrain/pybrain
Pybrain是基於Python語言強化學習,人工智慧,神經網路庫的簡稱。 它的目標是提供靈活、容易使用並且強大的機器學習演算法和進行各種各樣的預定義的環境中測試來比較你的演算法。
8.Pattern
www .github .com/clips/pattern
Pattern 是Python語言下的一個網路挖掘模塊。它為數據挖掘,自然語言處理,網路分析和機器學習提供工具。它支持向量空間模型、聚類、支持向量機和感知機並且用KNN分類法進行分類。
9.Fuel
www .github .com/mila-udem/fuel
Fuel為你的機器學習模型提供數據。他有一個共享如MNIST, CIFAR-10 (圖片數據集), Google’s One Billion Words (文字)這類數據集的介面。你使用他來通過很多種的方式來替代自己的數據。
10.Bob
www .github .com/idiap/bob
Bob是一個免費的信號處理和機器學習的工具。它的工具箱是用Python和C++語言共同編寫的,它的設計目的是變得更加高效並且減少開發時間,它是由處理圖像工具,音頻和視頻處理、機器學習和模式識別的大量軟體包構成的。
11.Skdata
www .github .com/jaberg/skdata
Skdata是機器學習和統計的數據集的庫程序。這個模塊對於玩具問題,流行的計算機視覺和自然語言的數據集提供標準的Python語言的使用。
12.MILK
www .github .com/luispedro/milk
MILK是Python語言下的機器學習工具包。它主要是在很多可得到的分類比如SVMS,K-NN,隨機森林,決策樹中使用監督分類法。 它還執行特徵選擇。 這些分類器在許多方面相結合,可以形成不同的例如無監督學習、密切關係金傳播和由MILK支持的K-means聚類等分類系統。
13.IEPY
www .github .com/machinalis/iepy
IEPY是一個專註於關係抽取的開源性信息抽取工具。它主要針對的是需要對大型數據集進行信息提取的用戶和想要嘗試新的演算法的科學家。
14.Quepy
www .github .com/machinalis/quepy
Quepy是通過改變自然語言問題從而在資料庫查詢語言中進行查詢的一個Python框架。他可以簡單的被定義為在自然語言和資料庫查詢中不同類型的問題。所以,你不用編碼就可以建立你自己的一個用自然語言進入你的資料庫的系統。
現在Quepy提供對於Sparql和MQL查詢語言的支持。並且計劃將它延伸到其他的資料庫查詢語言。
15.Hebel
www .github .com/hannes-brt/hebel
Hebel是在Python語言中對於神經網路的深度學習的一個庫程序,它使用的是通過PyCUDA來進行GPU和CUDA的加速。它是最重要的神經網路模型的類型的工具而且能提供一些不同的活動函數的激活功能,例如動力,涅斯捷羅夫動力,信號丟失和停止法。
16.mlxtend
www .github .com/rasbt/mlxtend
它是一個由有用的工具和日常數據科學任務的擴展組成的一個庫程序。
17.nolearn
www .github .com/dnouri/nolearn
這個程序包容納了大量能對你完成機器學習任務有幫助的實用程序模塊。其中大量的模塊和scikit-learn一起工作,其它的通常更有用。
18.Ramp
www .github .com/kvh/ramp
Ramp是一個在Python語言下制定機器學習中加快原型設計的解決方案的庫程序。他是一個輕型的pandas-based機器學習中可插入的框架,它現存的Python語言下的機器學習和統計工具(比如scikit-learn,rpy2等)Ramp提供了一個簡單的聲明性語法探索功能從而能夠快速有效地實施演算法和轉換。
19.Feature Forge
www .github .com/machinalis/featureforge
這一系列工具通過與scikit-learn兼容的API,來創建和測試機器學習功能。
這個庫程序提供了一組工具,它會讓你在許多機器學習程序使用中很受用。當你使用scikit-learn這個工具時,你會感覺到受到了很大的幫助。(雖然這隻能在你有不同的演算法時起作用。)20.REP
www .github .com/yandex/rep
REP是以一種和諧、可再生的方式為指揮數據移動驅動所提供的一種環境。
它有一個統一的分類器包裝來提供各種各樣的操作,例如TMVA, Sklearn, XGBoost, uBoost等等。並且它可以在一個群體以平行的方式訓練分類器。同時它也提供了一個互動式的情節。
21.Python 學習機器樣品
www .github .com/awslabs/machine-learning-samples用亞馬遜的機器學習建造的簡單軟體收集。
22.Python-ELM
www .github .com/dclambert/Python-ELM
這是一個在Python語言下基於scikit-learn的極端學習機器的實現。
23.gensim
主題模型python實現
Scalable statistical semantics
Analyze plain-text documents for semantic structureRetrieve semantically similar documents
python opencv怎麼創建一個cascadeobjectdetector對象
OpenCV中有兩個程序可以訓練級聯分類器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一個新程序,使用OpenCV 2.x API 以C++ 編寫。這二者主要的區別是 opencv_traincascade 支持 Haar、Hog和 LBP(Local Binary Patterns) 三種特徵,並易於增加其他的特徵。與Haar特徵相比,LBP特徵是整數特徵,因此訓練和檢測過程都會比Haar特徵快幾倍。LBP和Haar特徵用於檢測的準確率,是依賴訓練過程中的訓練數據的質量和訓練參數。訓練一個與基於Haar特徵同樣準確度的LBP的分類器是可能的。
opencv_traincascade and opencv_haartraining 所輸出的分類器文件格式並不相同。注意,新的級聯檢測介面(參考 objdetect 模塊中的 CascadeClassifier 類)支持這兩種格式。 opencv_traincascade 可以舊格式導出訓練好的級聯分類器。但是在訓練過程被中斷後再重啟訓練過程, opencv_traincascade and opencv_haartraining 不能裝載與中斷前不同的文件格式。
opencv_traincascade 程序使用TBB來處理多線程。如果希望使用多核並行運算加速,請使用TBB來編譯OpenCV。還有一些與訓練相關的輔助程序。
python+opencv 怎麼實現一個和vision.cascadeobjectdetector一樣的對象
OpenCV中有兩個程序可以訓練級聯分類器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一個新程序,使用OpenCV 2.x API 以C++ 編寫。這二者主要的區別是 opencv_traincascade 支持 Haar、Hog和 LBP(Local Binary Pattern…
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/249833.html