Reference:
- 卡方檢驗(Chi-square test/Chi-Square Goodness-of-Fit Test)
- 卡方檢驗詳解分析與實例
1. 概念
-
卡方值: χ 2 \chi^2 χ2 值表示觀察值與理論值之間的偏離程度。計算這種偏離程度的基本思路如下:
- 設(shè)
O
O
O 代表某個類別的
觀察頻數(shù)
, E E E 代表基于某個假設(shè) H 0 H_0 H0? 計算出的期望頻數(shù)
, O O O 與 E E E 之差稱為殘差; - 殘差可以表示某一個類別觀察值和理論值的偏離程度,但如果將殘差簡單相加以表示各類別觀察頻數(shù)與期望頻數(shù)的差別,則有一定的不足之處。因為殘差有正有負,相加后會彼此抵消,綜合仍然為 0 0 0,為此可以將殘差平方后求和;
- 另一方面,殘差大小是一個相對概念,相對于期望頻數(shù)為 10 10 10 時,期望頻數(shù)為 20 20 20 的殘差非常大,但相對于期望頻數(shù)為 1000 1000 1000 時 20 20 20 的殘差就很小了??紤]到這一點,人們又將殘差平方除以期望頻數(shù)再求和,以估計觀察頻數(shù)與期望頻數(shù)的差別。
進行上述操作之后,就得到了常用的 χ 2 \chi^2 χ2 統(tǒng)計量,其計算公式為:
χ 2 = ∑ ( O ? E ) 2 E = ∑ i = 1 k ( O i ? E i ) 2 E i = ∑ i = 1 k ( O i ? n p i ) 2 n p i ( i = 1 , 2 , 3 , . . . , k ) \chi^{2}=\sum{\frac{(O-E)^{2}}{E}}=\sum_{i=1}^{k}{\frac{(O_{i}-E_{i})^{2}}{E_{i}}}=\sum_{i=1}^{k}{\frac{(O_{i}-n p_{i})^{2}}{n p_{i}}}\quad{\mathrm{(i=1,2,3,...,k)}} χ2=∑E(O?E)2?=i=1∑k?Ei?(Oi??Ei?)2?=i=1∑k?npi?(Oi??npi?)2?(i=1,2,3,...,k)其中, O i O_i Oi? 為 i i i 水平的觀察頻數(shù), E i E_i Ei? 為 i i i 水平的期望頻數(shù), n n n 為總頻數(shù), p i p_i pi? 為 i i i 水平的期望概率, i i i 水平的期望頻數(shù) E i E_i Ei? 等于總頻數(shù) n × i n\times i n×i 水平的期望概率 p i p_i pi?, k k k 為單元格數(shù)。當 n n n 比加大時, χ 2 \chi^2 χ2 統(tǒng)計量近似服從 k ? 1 k-1 k?1(計算 E i E_i Ei? 時用到的參數(shù)個數(shù))個自由度的卡方分布。由卡方的計算公式可知,當觀察頻數(shù)與期望頻數(shù)完全一致時, χ 2 \chi^2 χ2 值為 0 0 0;觀察頻數(shù)與期望頻數(shù)越接近,兩者之間的差異越小, χ 2 \chi^2 χ2 值越?。环粗?,觀察頻數(shù)與期望頻數(shù)差別越大,兩者之間的差異越大, χ 2 \chi^2 χ2 值越大。換言之,大的 χ 2 \chi^2 χ2 值表明觀察頻數(shù)遠離期望頻數(shù),即表明遠離假設(shè)。小的 χ 2 \chi^2 χ2 值表明觀察頻數(shù)接近期望頻數(shù),接近假設(shè)。因此, χ 2 \chi^2 χ2 是觀察頻數(shù)與期望頻數(shù)之間距離的一種度量指標,也是假設(shè)成立與否的度量指標。如果 χ 2 \chi^2 χ2 值小,研究者就傾向于不拒絕 H 0 H_0 H0?;如果 χ 2 \chi^2 χ2 值大,就傾向于拒絕 H 0 H_0 H0?。至于 χ 2 \chi^2 χ2 在每個具體研究中究竟要達到什么程度才能拒絕 H 0 H_0 H0?,則要借助于卡方分布求出所對應(yīng)的 P P P 來確定,這就引出了顯著性水平的概念。
- 設(shè)
O
O
O 代表某個類別的
-
顯著性水平: 顯著性水平是估計總體參數(shù)落在某一區(qū)間內(nèi)可能犯錯的概率,用 α \alpha α 表示,即當原假設(shè)為正確時,卻把它濾掉了的概率或風(fēng)險,通常取 α = 0.05 \alpha=0.05 α=0.05 或 α = 0.01 \alpha=0.01 α=0.01。這表明當做出接受原假設(shè)的決定時,其正確的可能性(概率)為 95 % 95\% 95% 或 99 % 99\% 99%。
2. 卡方檢驗的基本思想
卡方檢驗是以 χ 2 \chi^2 χ2 分布為基礎(chǔ)的一種常用假設(shè)檢驗方法,它的無效建設(shè) H 0 H_0 H0? 是:觀察頻數(shù)與期望頻數(shù)沒有差別。
該檢驗的基本思想是:首先假設(shè) H 0 H_0 H0? 成立,基于此前提計算出 χ 2 \chi^2 χ2 的值,它表示觀察值與理論值之間的偏離程度。根據(jù) χ 2 \chi^2 χ2 分布及自由度可以確定在 H 0 H_0 H0? 假設(shè)成立的情況下獲得當前統(tǒng)計量及更極端情況的概率 P P P。如果 P P P 值很小,說明觀察值與理論值偏離程度太大,應(yīng)當拒絕無效假設(shè),表示比較資料之間有顯著差異;否則就不能拒絕無效假設(shè),尚不能認為樣本所代表的實際情況和理論假設(shè)有差別。
根據(jù)自由度和顯著性水平查詢檢驗統(tǒng)計量臨界值,其中縱軸為自由度,橫軸為顯著性水平閾值。比如檢查單應(yīng)陣的函數(shù),點到點的重投影誤差自由度為
2
2
2,在顯著性水平為
0.05
0.05
0.05 時通過查表得閾值為
5.99
5.99
5.99:
3. 卡方檢測示例
為了驗證肺癌與吸煙的關(guān)系,我們得到如下數(shù)據(jù):
是否肺病患者 | 吸煙 | 不吸煙 | 合計 | 吸煙比例 |
---|---|---|---|---|
是 | 158 | 169 | 327 | 48% |
否 | 82 | 311 | 393 | 20% |
合計 | 240 | 480 | 720 | 33% |
首先假設(shè)吸煙與肺癌兩者之間沒有關(guān)系(這里應(yīng)該不用先假設(shè)有沒關(guān)系,越大就是越有關(guān)系,越小就是越?jīng)]有關(guān)系,根據(jù)數(shù)值判斷相關(guān)性),我們計算期望值(因為上面吸煙的比例為33%,因此在吸煙與肺癌沒有關(guān)系的時候,肺癌患者吸煙與不吸煙的比例應(yīng)該是33%,沒有得肺癌的吸煙與不吸煙的比例也應(yīng)該是33%):
是否肺病患者 | 吸煙 | 不吸煙 | 合計 | 吸煙比例 |
---|---|---|---|---|
是 | 109 | 218 | 327 | 33% |
否 | 131 | 262 | 393 | 33% |
合計 | 240 | 480 | 720 | 33% |
帶入卡方計算公式:
χ
2
=
(
158
?
109
)
2
109
+
(
169
?
218
)
2
218
+
(
82
?
131
)
2
131
+
(
311
?
262
)
2
262
=
60.53
\chi^2=\frac{(158-109)^2}{109}+\frac{(169-218)^2}{218}+\frac{(82-131)^2}{131}+\frac{(311-262)^2}{262} =60.53
χ2=109(158?109)2?+218(169?218)2?+131(82?131)2?+262(311?262)2?=60.53自由度的計算方法,可以簡單抽象成:(行數(shù)-1)*(列數(shù)-1),所以這里的自由度為
1
1
1。
通過查表可得自由度為 1 1 1 時,顯著性水平為 0.05 0.05 0.05,當卡方值小于 3.84 3.84 3.84 時,可以接受原假設(shè),即變量之間沒有相關(guān)性??ǚ街翟叫?,不相關(guān)的概率越大?,F(xiàn)在卡方值遠大于 3.84 3.84 3.84,說明兩者不相關(guān)的概率很小,即抽煙與肺癌有關(guān)。
4. ORB-SLAM2中卡方檢測剔除外點的策略
就特征點法的視覺SLAM而言,一般會計算重投影誤差。具體而言,記
u
\mathbf{u}
u 為特征點的
2
D
2D
2D 位置,
u
ˉ
\bar{\mathbf{u}}
uˉ 為由地圖點投影到圖像上的
2
D
2D
2D 位置。重投影誤差為:
e
=
u
?
u
ˉ
\mathbf{e}=\mathbf{u}-\mathbf{\bar{u}}
e=u?uˉ重投影誤差服從高斯分布:
e
~
N
(
0
,
Σ
)
\mathbf{e}\sim\mathcal{N}(\mathbf{0},\mathbf{\Sigma})
e~N(0,Σ)其中,協(xié)方差
Σ
\mathbf{\Sigma}
Σ 一般根據(jù)特征點提取的金字塔層級決定。具體的,記提取ORB特征時,圖像金字塔的每層縮小尺度為
s
s
s(ORB-SLAM中為1.2)。在ORB-SLAM中假設(shè)第
0
0
0 層的標準差為
p
p
p 個pixel(ORB-SLAM中設(shè)為了1個pixel);那么,一個在金字塔第
n
n
n 層提取的特征的重投影誤差的協(xié)方差為:
Σ
=
(
s
n
×
p
)
2
[
1
0
0
1
]
\boldsymbol{\Sigma}=(s^n\times p)^2\begin{bmatrix}1&0\\ 0&1\end{bmatrix}
Σ=(sn×p)2[10?01?]式
e
=
u
?
u
ˉ
\mathbf{e}=\mathbf{u}-\mathbf{\bar{u}}
e=u?uˉ 中的誤差是一個
2
2
2 維向量,這里閾值不好設(shè)置,就把它變成一個標量,計算向量的內(nèi)積
r
r
r(向量元素的平方和)。但是,這又有一個問題,不同金字塔層的特征點都用同一個閾值,是不是不合理呢?于是,在計算內(nèi)積的時候,利用協(xié)方差進行加權(quán)(協(xié)方差表達了不確定度)。金字塔層級越高特征點提取精度越低,協(xié)方差
Σ
\mathbf{\Sigma}
Σ 越大,那么就有了:
r
=
e
T
Σ
?
1
e
r=\mathbf{e}^{T}\mathbf{\Sigma}^{-1}\mathbf{e}
r=eTΣ?1e利用協(xié)方差加權(quán),起到了歸一化的作用,具體如上式,可以變?yōu)椋?br>
r
=
(
Σ
?
1
2
e
)
T
(
Σ
?
1
2
e
)
r=(\boldsymbol{\Sigma}^{-\frac{1}{2}}\mathbf{e})^T(\boldsymbol{\Sigma}^{-\frac{1}{2}}\mathbf{e})
r=(Σ?21?e)T(Σ?21?e)而:
(
Σ
?
1
2
e
)
~
N
(
0
,
I
)
(\mathbf\Sigma^{-\frac{1}{2}}\mathbf e)\sim\mathcal N(\mathbf0,\mathbf I)
(Σ?21?e)~N(0,I)為多維標準正態(tài)分布,也就是說不同金字塔層提取的特征,計算的重投影誤差都被歸一化了,或者說去量綱化了,那么,我們只用一個閾值就可以了。文章來源:http://www.zghlxwxcb.cn/news/detail-460064.html
4.1 示例,卡方檢驗計算置信度得分: CheckFundamental()、CheckHomography()
根據(jù)重投影誤差構(gòu)造統(tǒng)計量 χ 2 \chi^2 χ2,其值越大,觀察結(jié)果和期望結(jié)果之間的差別越顯著,某次計算越可能用到了外點:文章來源地址http://www.zghlxwxcb.cn/news/detail-460064.html
float Initializer::CheckHomography(const cv::Mat &H21, const cv::Mat &H12, vector<bool> &vbMatchesInliers, float sigma) {
const int N = mvMatches12.size();
//取出單應(yīng)矩陣H各位上的值
const float h11 = H21.at<float>(0, 0);
const float h12 = H21.at<float>(0, 1);
const float h13 = H21.at<float>(0, 2);
const float h21 = H21.at<float>(1, 0);
const float h22 = H21.at<float>(1, 1);
const float h23 = H21.at<float>(1, 2);
const float h31 = H21.at<float>(2, 0);
const float h32 = H21.at<float>(2, 1);
const float h33 = H21.at<float>(2, 2);
const float h11inv = H12.at<float>(0, 0);
const float h12inv = H12.at<float>(0, 1);
const float h13inv = H12.at<float>(0, 2);
const float h21inv = H12.at<float>(1, 0);
const float h22inv = H12.at<float>(1, 1);
const float h23inv = H12.at<float>(1, 2);
const float h31inv = H12.at<float>(2, 0);
const float h32inv = H12.at<float>(2, 1);
const float h33inv = H12.at<float>(2, 2);
vbMatchesInliers.resize(N);//標記是否是內(nèi)點
float score = 0;//置信度得分
const float th = 5.991;//<---自由度為2(u,v),顯著性水平為0.05的卡方分布對應(yīng)的臨界閾值
const float invSigmaSquare = 1.0 / (sigma * sigma);//信息矩陣,方差平方的倒數(shù)
for (int i = 0; i < N; i++) {//雙向投影,計算加權(quán)投影誤差
bool bIn = true;
//step1. 提取特征點對
const cv::KeyPoint &kp1 = mvKeys1[mvMatches12[i].first];
const cv::KeyPoint &kp2 = mvKeys2[mvMatches12[i].second];
const float u1 = kp1.pt.x;
const float v1 = kp1.pt.y;
const float u2 = kp2.pt.x;
const float v2 = kp2.pt.y;
// Reprojection error in first image
// x2in1 = H12*x2
//step2. 計算img2到img1的重投影誤差
const float w2in1inv = 1.0 / (h31inv * u2 + h32inv * v2 + h33inv);
const float u2in1 = (h11inv * u2 + h12inv * v2 + h13inv) * w2in1inv;
const float v2in1 = (h21inv * u2 + h22inv * v2 + h23inv) * w2in1inv;
const float squareDist1 = (u1 - u2in1) * (u1 - u2in1) + (v1 - v2in1) * (v1 - v2in1);
const float chiSquare1 = squareDist1 * invSigmaSquare;
//step3. 離群點標記上,非離群點累加計算得分
if (chiSquare1 > th)
bIn = false;
else
score += th - chiSquare1;
// Reprojection error in second image
// x1in2 = H21*x1
//step4. 計算img1到img2的重投影誤差
const float w1in2inv = 1.0 / (h31 * u1 + h32 * v1 + h33);
const float u1in2 = (h11 * u1 + h12 * v1 + h13) * w1in2inv;
const float v1in2 = (h21 * u1 + h22 * v1 + h23) * w1in2inv;
const float squareDist2 = (u2 - u1in2) * (u2 - u1in2) + (v2 - v1in2) * (v2 - v1in2);
const float chiSquare2 = squareDist2 * invSigmaSquare;
//step5. 離群點標記上,非離群點累加計算得分
if (chiSquare2 > th)
bIn = false;
else
score += th - chiSquare2;
if (bIn)
vbMatchesInliers[i] = true;
else
vbMatchesInliers[i] = false;
}
return score;
}
到了這里,關(guān)于ORB-SLAM內(nèi)的卡方檢驗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!