機器學習讀書筆記之5 RANSAC

2021-07-26 02:22:24 字數 1712 閱讀 1707

隨機取樣一致性randomsampleconsensus),是 指從一組包含 「局外點」的資料集中,通過迭代方法估算數學模型的引數。

ransac是一種不確定的演算法,它有一定的概率得出乙個合理的結果,為了提高概率必須增加迭代次數。

來看這樣乙個簡單樣例,假設我們想擬合一條直線:

可以看到,圖中 紅色的點是 「局外點」,藍色的為 「內部點」,很明顯,我們想通過不斷隨機抽取的方式,使得我們選中的點恰好為藍色點,因為在這種情況下,擬合得到的模型誤差最小。

ransac 演算法思路非常簡單,在模型確定以及最大迭代次數允許的情況下,ransac總是能找到最優解。對於包含50%以上誤差的資料集,ransac的效果遠優於直接的最小二乘法。

關於拼接這裡不多說,前面的章節有過介紹,可以參考作者之前的博文【全景拼接 】。

我們來看一段作者蒐集的**(來自於 ziv yaniv):

#include #include "lineparamestimator.h"  

lineparamestimator::lineparamestimator(double delta) : m_deltasquared(delta*delta) {}

void lineparamestimator::estimate(std::vector&data,std::vector¶meters)

void lineparamestimator::leastsquaresestimate(std::vector&data, std::vector¶meters)

meanx/=datasize;

meany/=datasize;

covmat11 -= datasize*meanx*meanx;

covmat12 -= datasize*meanx*meany;

covmat22 -= datasize*meany*meany;

covmat21 = covmat12;

if(covmat11<1e-12)

else

parameters.push_back(nx);

parameters.push_back(ny);

parameters.push_back(meanx);

parameters.push_back(meany);

}

bool lineparamestimator::agree(std::vector¶meters, point2d &data)

// ransac尋找匹配的**

templatedouble ransac::compute(std::vector&meters,parameteresitmator*paramestimator,std::vector&data,int numforestimate)

機器學習讀書筆記

第一章 引言介紹一些常識引入什麼是機器學習,機器學習的一些術語資料,規律,泛化,假設空間歸納偏好。1,假設空間 假設空間 監督學習的目的在於學習乙個由輸入到輸出的對映,這一對映由模型來表示。換句話說,學習的目的就在於找到最好的這樣的模型。模型屬於由輸入空間到輸出空間的對映集合,這個集合就是假設空間 ...

周志華 機器學習 讀書筆記

分類 classification 的是離散值,比如 好瓜 壞瓜 回歸 regression 的是連續值,例如西瓜成熟度 0.79 0.95 泛化 generalization 學得模型適用於新樣本的能力,稱為 泛化 generalization 能力.資料探勘 data mining 從海量資料中...

《機器學習實戰》讀書筆記

監督學習使用兩種型別的目標變數 之所以稱監督學習,是因為這類演算法必須知道 什麼,即目標變數的分類資訊 在無監督學習中,將資料集合分成由類似的物件組成的多個類的過程被稱為聚類 將尋找描述資料統計值的過程稱之為密度估計 是 否要 預測目標 變數的值 是 監督學習 目標變數型別 begin離散型 分類演...