我正在阅读一本关于Python的数据科学的书,作者应用'sigma-clipping operation'来删除因拼写错误而导致的异常值。但是这个过程根本没有解释。
什么是sigma剪辑?它是否仅适用于某些数据(例如,它用于美国的出生率)?
根据文字:
quartiles = np.percentile(births['births'], [25, 50, 75]) #so we find the 25th, 50th, and 75th percentiles
mu = quartiles[1] #we set mu = 50th percentile
sig = 0.74 * (quartiles[2] - quartiles[0]) #???
This final line is a robust estimate of the sample mean, where the 0.74 comes
from the interquartile range of a Gaussian distribution.
为什么是0.74?有证据吗?
答案 0 :(得分:7)
最后一行是对样本均值的有力估计,其中为0.74 来自高斯分布的四分位数范围。
那是真的......
代码尝试使用四分位数范围来估计sigma,以使其对异常值具有鲁棒性。 0.74是校正因子。以下是如何计算它:
// burgers-controller.js
router.get('/', (req, res)=> {
burgers
.selectAll()
.then((result) => {
let handlebarsObj = {
burgers: result
}
res.render('index', handlebarsObj)
})
.catch((err) => {
let errMsg = {
message: err.message,
error: err
}
res.render('index', errMsg)
})
})
// burgers.js
let burgers = {
selectAll: () => {
return new Promise((resolve, reject) => {
orm
.selectAll('burgers')
.then((result) => {
resolve(result)
})
.catch((err) => {
reject(err)
})
})
}
}
// orm.js
let orm = {
selectAll: (tableName) => {
return new Promise((resolve, reject) => {
let queryString = "SELECT * FROM ??"
connection.query(queryString, tableName, (err, data)=>{
if (err) {
console.error("ERROR: " + err.stack)
reject(err)
} else {
resolve(data)
}
})
})
}
}
在标准正态分布p1 = sp.stats.norm.ppf(0.25) # first quartile of standard normal distribution
p2 = sp.stats.norm.ppf(0.75) # third quartile
print(p2 - p1) # 1.3489795003921634
sig = 1 # standard deviation of the standard normal distribution
factor = sig / (p2 - p1)
print(factor) # 0.74130110925280102
中,四分位数间距为sig==1
。所以1.35
是将四分位数范围变为西格玛的修正因子。当然,这仅适用于正态分布。
答案 1 :(得分:4)
假设您有一组数据。计算其中位数m
及其标准差sigma
。仅保留范围(m-a*sigma
,m+a*sigma
)内的数据为a
的某个值,并丢弃其他所有内容。这是sigma裁剪的一次迭代。继续迭代预定次数,和/或当西格玛值的相对减少很小时停止。
Sigma剪切旨在去除异常值,以允许例如分布均值的更稳健(即,抵抗异常值)估计。因此,它适用于您希望找到异常值的数据。
至于0.74,它来自高斯分布的四分位数范围,根据文本。
答案 2 :(得分:0)
我认为这句话有一个小的错别字:“这最后一行是对样本平均值的有力估计”。根据以前的证据,我认为如果遵循正态分布,最后的结论是对出生的1 Sigma的可靠估计。