奇异值检测和处理惩罚
当前位置:以往代写 > 其他教程 >奇异值检测和处理惩罚
2019-06-14

奇异值检测和处理惩罚

奇异值检测和处理惩罚

[TOC]

### 1 为什么要奇异值检测和处理惩罚
因为奇异值可以大大地方向可能改变拟合预计和预测。
举例说明:汽车数据集,比拟没有奇异值和有奇异值的简朴线性回归模子的拟合,然后做预测。

**R代码**
“`
## 汽车数据集
data(cars)
dim(cars)

par(mfrow = c(1,2))
## 原始数据集
cars1 <- cars[1:30, ]
## 景象一:没有奇异值
plot(
cars1$speed,
cars1$dist,
xlim = c(0, 28),
ylim = c(0, 230),
main = "没有奇异值 \n 简朴线性回归模子",
xlab = "速度",
ylab = "间隔",
pch = "*",
col = "red",
cex = 2
)
abline(
lm(dist ~ speed, data = cars1),
col = "blue",
lwd = 3,
lty = 2
)

## 景象二:有奇异值
## 人工结构奇异值
cars.outliers <- data.frame(
speed = c(19, 19, 20, 20, 20),
dist = c(190, 186, 210, 220, 218)
)
cars2 <- rbind(cars1, cars.outliers)
plot(
cars2$speed,
cars2$dist,
xlim = c(0, 28),
ylim = c(0, 230),
main = "有奇异值 \n 简朴线性回归模子",
xlab = "速度",
ylab = "间隔",
pch = "*",
col = "red",
cex = 2
)
abline(
lm(dist ~ speed, data = cars2),
col = "blue",
lwd = 3,
lty = 2
)
“`
**功效**
![](http://img.shujuren.org/pictures/8Y/59d9b0b3261ec.png)

**总结**
异常值导致预测模子斜率的变革,若是操作异常值数据拟合模子(右图),导致预测功效带来高误差。

### 2 奇异值检测
#### 2.1 单变量要领
对付持续变量,奇异值位于1.5IQR范畴之外。
IQR = 75%四分位数-25%四分位数
**R代码**
“`
## 数据获取
url <- "http://rstatistics.net/wp-content/uploads/2015/09/ozone.csv"
inputData <- read.csv(url)

## 异常值
outlier.values <- boxplot.stats(
inputData$pressure_height
)$out
print(outlier.values)

par(mfrow=c(1,1))
## 异常值可视化
boxplot(
inputData$pressure_height,
main = "Pressure Height",
boxwex=0.1
)
mtext(
paste("Outliers: ", paste(outlier.values, collapse=", ")),
cex=0.6
)
“`
**功效**
![](http://img.shujuren.org/pictures/03/59d9b5332e445.png)

#### 2.2 双变量要领
双变量x和y的盒子图,x是种别变量。
**R代码**
“`
par(mfrow=c(1,2))
boxplot(
ozone_reading ~ Month,
data = inputData,
main = "Ozone reading across months"
)
boxplot(
ozone_reading ~ Day_of_week,
data = inputData,
main = "Ozone reading for days of week"
)
“`
**功效**
![](http://img.shujuren.org/pictures/ZV/59d9b7a24f45c.png)
**总结**
由图可知,月份对臭氧变革有影响,而礼拜没有。异常值见盒子图中空心圆圈。

#### 2.3 多变量模子要领
**Cooks Distance**,**简称CD**
计较每个样本(视察)对预测功效的影响水平。
一般环境,一个样本的CD大于4倍CD的平均值,则被当做对预测是有影响力,这样的样本,可以当做异常值处理惩罚。
代码
“`
mod <- lm(ozone_reading ~ ., data=inputData)
cooksd <- cooks.distance(mod)
par(mfrow=c(1,1))
plot(
cooksd,
pch = "*",
cex = 2,
main = "Influential Obs by Cooks distance"
)

abline(
h = 4 * mean(cooksd, na.rm = TRUE),
col = "red"
)
text(
x=1:length(cooksd)+1,
y=cooksd,
labels=ifelse(cooksd>4*mean(cooksd, na.rm=T),names(cooksd),""),
col="red"
)

influential <- as.numeric(names(cooksd)[(cooksd > 4*mean(cooksd, na.rm=T))]) # influential row numbers
View(head(inputData[influential, ]))
“`
**功效**
![](http://img.shujuren.org/pictures/3V/59d9c1024d10d.png)

#### 2.4 奇异值包:outliers
outliers异常值包提供了很多有用函数来做异常值检测和处理惩罚,出格是outlier() 和scores() 函数。
奇异值包outliers的利用要领,阅读[**包文档**](https://cran.r-project.org/web/packages/outliers/outliers.pdf "包文档")。
### 3 奇异值处理惩罚
要领一:插值替换法
利用均值可能中位数可能众数填补
要领二:预测法
把异常值当做NA,然后操作NA的处理惩罚要领,拟合得当模子,预测出NA的值

**参考资料:**
1 R做异常值检测:http://r-statistics.co/Outlier-Treatment-With-R.html

您在阅读中,有什么发起可能想法,请评论。
想插手圈子,请加微信。

    关键字:

在线提交作业