我已经使用您的数据集创建了非常简单的模型。为此,我在 R 中使用了 Rattle 库。
输入数据
rgbh1 - number of bins in RGB histogram, which value > @param@, in my case @param@ = 30 (340 is maximum value)
rgbh2 - number of bins in RGB histogram, which value > 0 (not empty)
hsvh1 - number of bins in HSV histogram, which value > @param@, in my case @param@ = 30 (340 is maximum value)
hsvh2 - number of bins in HSV histogram, which value > 0 (not empty)
countours - number of contours on image
PicFlag - flag indicating picture/photo (picture = 1, photo = 0)
数据探索
为了更好地理解您的数据,这里是按图片/照片组的单个变量分布图(y 轴上有百分比):
它清楚地表明存在具有预测能力的变量。它们中的大多数都可以在我们的模型中使用。接下来,我创建了简单的散点图矩阵,以查看某些变量组合是否有用:
您可以看到例如 countours 数和 rgbh1 的组合看起来很有希望。
在下图中,您可以注意到变量之间也存在很强的相关性。(通常,我们喜欢有很多相关性较低的变量,而您只有有限数量的相关变量)。饼图显示相关性有多大 - 实心圆圈表示 1,空心圆圈表示 0,我的观点是,如果相关性超过 0.4,则模型中同时包含两个变量可能不是一个好主意)
模型
然后我使用决策树、随机森林、逻辑回归和神经网络创建了简单的模型(保持 Rattle 的默认设置)。作为输入,我使用了 60/20/20 拆分的数据(训练、验证、测试数据集)。这是我的结果(如果您不了解错误矩阵,请参考谷歌):
Error matrix for the Decision Tree model on pics.csv [validate] (counts):
Predicted
Actual 0 1
0 167 22
1 6 204
Error matrix for the Decision Tree model on pics.csv [validate] (%):
Predicted
Actual 0 1
0 42 6
1 2 51
Overall error: 0.07017544
Rattle timestamp: 2013-01-02 11:35:40
======================================================================
Error matrix for the Random Forest model on pics.csv [validate] (counts):
Predicted
Actual 0 1
0 170 19
1 8 202
Error matrix for the Random Forest model on pics.csv [validate] (%):
Predicted
Actual 0 1
0 43 5
1 2 51
Overall error: 0.06766917
Rattle timestamp: 2013-01-02 11:35:40
======================================================================
Error matrix for the Linear model on pics.csv [validate] (counts):
Predicted
Actual 0 1
0 171 18
1 13 197
Error matrix for the Linear model on pics.csv [validate] (%):
Predicted
Actual 0 1
0 43 5
1 3 49
Overall error: 0.07769424
Rattle timestamp: 2013-01-02 11:35:40
======================================================================
Error matrix for the Neural Net model on pics.csv [validate] (counts):
Predicted
Actual 0 1
0 169 20
1 15 195
Error matrix for the Neural Net model on pics.csv [validate] (%):
Predicted
Actual 0 1
0 42 5
1 4 49
Overall error: 0.0877193
Rattle timestamp: 2013-01-02 11:35:40
======================================================================
结果
如您所见,总体错误率在 6.5% 和 8% 之间波动。我不认为通过调整使用方法的参数可以显着改善这个结果。有两种方法可以降低总体错误率:
- 添加更多不相关的变量(我们在建模数据集中通常有 100 多个输入变量,最终模型中有 +/- 5-10)
- 添加更多数据(然后我们可以调整模型而不会被过度拟合吓到)
用过的软件:
用于创建 corrgram 和散点图的代码(其他输出使用 Rattle GUI 生成):
# install.packages("lattice",dependencies=TRUE)
# install.packages("car")
library(lattice)
library(car)
setwd("C:/")
indata <- read.csv2("pics.csv")
str(indata)
# Corrgram
corrgram(indata, order=TRUE, lower.panel=panel.shade,
upper.panel=panel.pie, text.panel=panel.txt,
main="Picture/Photo correlation matrix")
# Scatterplot Matrices
attach(indata)
scatterplotMatrix(~rgbh1+rgbh2+hsvh1+hsvh2+countours|PicFlag,main="Picture/Photo scatterplot matrix",
diagonal=c("histogram"),legend.plot=TRUE,pch=c(1,1))