机器学习决策树算法解决图像识别
来源:互联网 发布:java培训出来没底气 编辑:程序博客网 时间:2024/06/04 19:31
算法介绍
什么是决策树算法
决策树又称判定树,是一个类似于流程图的树结构:其中,每个内部结点表示在一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或类分布。树的最顶层是根结点。
构造决策树的基本算法
主要评估标准,准确率,速度,健壮性,可规模性,可解释性
样例:研究某人今天会不会出去玩?
历史数据:
从图片中可以看出来,此人前14天中9天出去玩,5天没有出去玩,其中由于天气情况原因,晴天2天出去玩,3天没有出去玩,阴天4天出去玩,0天没有出去玩,雨天3天出去玩,2天没有出去玩,然后由于湿度和风力影响,又有了下一轮决策是否出去玩的情况。以此类推分析分类此人是否会出去玩。
2.1.3 熵
例子:猜世界杯冠军,假如一无所知,假如每个队夺冠的几率都是相等的,那么需要猜多少次?
过程:是否是在前16只队伍中,32/2,用二分法可知,需要猜5次。
熵的单位是bit
info(D) = -(1/32*log(1/32)+1/32*log(1/32)+1/32*log(1/32) +1/32*log(1/32)+1/32*log(1/32)...)累加32次
info(D)= 5bit
结论:数据量越大,熵值越大,不准确率越高
熵的差值则为有条件后的概率优化程度,以前面的案例分析,如果直接猜测某人会不会出去玩。结果为:
如果加上天气情况分析,结果为:
所以在已知天气情况的条件下,数据准确率优化了0.246
2.1.4 算法优缺点
优点:直观,便于理解,小规模数据集有效
缺点:处理连续变量不好,类别较多时,错误增加的比较快,可规模性一般
2.2 逻辑分析
此时不得不让我非常开心,那如何利用决策树来做图像识别呢?对此还是让很多人无法理解,现在就慢慢向大家阐述。
再次对上述案例进行分析
天气
湿度
风力
是否出去玩
sunny
<=70
无
玩
sunny
<=70
无
玩
sunny
>70
无
不玩
sunny
>70
无
不玩
sunny
>70
无
不玩
overcast
无
无
玩
overcast
无
无
玩
overcast
无
无
玩
overcast
无
无
玩
rain
无
风
不玩
rain
无
风
不玩
rain
无
没风
玩
rain
无
没风
玩
rain
无
没风
玩
然后程序化上述程序:
天气为三维,设置晴天为[1,0,0],那么多云为[0,1,0],雨天为[0,0,1]
湿度为三维,设置<=70为[1,0,0],那么>70为[0,1,0],无为[0,0,1]
风力为三维,设置有风为[1,0,0],那么无风为[0,1,0],无为[0,0,1]
是否出去玩为二维,设置玩为[1],不玩为[0]
由此可知第一项则为 [1,0,0,1,0,0,0,0,1],结果为[1]
以此类推。
之后得出矩阵的计算其最优单位向量个数,
[1,0,0,1,0,0,0,0,1
1,0,0,1,0,0,0,0,1
1,0,0,0,1,0,0,0,0]
每三列则为一个特征向量,然后进行计算熵值最小情况下哪些向量所占权重最大。
但是如何去分析图像相似还是有很大距离,在图像中会有很大像素,例如60*60像素的图片,每个像素点会转换为类似[255,200,10]RGB类型,本报告进行简单分析,首先将图片进行灰度图化,转化为例如[245],然后对下个像素点大小与之比较,大则为0,小则为1,由于图像像素点大,之后会转换为复杂矩阵,之后再对矩阵进行特征向量切割,例如:
[1,0,0,1,0,0,0,0,1
1,0,1,1,0,1,0,0,1
1,0,0,0,1,0,0,0,0]
此矩阵特征向量则为2,1,2,3,1分列,然后在进行熵值计算,权重比对,计算出最合理向量权重占比,之后再对测试图像中的向量进行比对,就可以进算出其相似度。
图像分析结果相当出众,可以对动态相似图片与其他图片有比较大的区分。
6.3 代码实现
编程语言为python ,利用Anaconda2环境编写,测试图片见附录
# -*- coding: utf-8 -*-
import os
from PILimportImage
from PILimportImageFilter
from PILimportImageOps
from sklearnimporttree
def getCode(img,size):
pixel_Y = []
featurelist = []
for xinrange(0,size[0]):
global tmp
pixel_X = []
for yinrange(0,size[1]):
pixel = img.getpixel((x, y))
pixel_next = img.getpixel((x, y+1))ify < size[1]-1elseNone
if pixel_nextis notNone:
feature = 0 ifpixel < pixel_nextelse1
pixel_X.append(feature)
else:
featurelist.append(tmp)
pixel_X.pop()
feature = 0
tmp = feature
pixel_Y.append(pixel_X)
return pixel_Y,featurelist
def OrginCode(dummyX,dummyY):
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf.fit(dummyX, dummyY)
return clf
def Cmpcode(cls,dummyX,dummyY):
equal = 0
predictedY = cls.predict(dummyX)
for n,yinenumerate(predictedY):
if y == dummyY[n]:
equal += 1
return equal
class imageOragin(object):
def __init__(self,size=(1366,768),*image):
dummyX = []
dummyY = []
for iinimage:
i = i.resize(size).convert('L')
i = ImageOps.equalize(i)
code1 = getCode(i, size)
dummyX += code1[0]
dummyY += code1[1]
self.size = size
self.cls = OrginCode(dummyX,dummyY)
def cmp(self,image):
# image.resize(self.size).convert('L').filter(ImageFilter.BLUR)图像模糊化 filter为图像增强手段,不建议使用
# 更多关于ImageFilter推荐博客http://blog.csdn.net/icamera0/article/details/50708888
# resize重新定义图片大小
image = image.resize(self.size).convert('L')
# ImageOps.equalize均衡图像的直方图。该函数使用一个非线性映射到输入图像,为了产生灰色值均匀分布的输出图像。
# 更多关于ImageOps推荐博客http://blog.csdn.net/icamera0/article/details/50785776
image = ImageOps.equalize(image)
code2 = getCode(image, self.size)
equal = Cmpcode(self.cls,*code2)
return equal *1.00/ self.size[0]
if __name__ =='__main__':
image = []
image1 = Image.open(r'C:\ML\imagetest\a1.png',"r")
image2 = Image.open(r'C:\ML\imagetest\a3.png',"r")
image3 = Image.open(r'C:\ML\imagetest\24.png',"r")
image4 = Image.open(r'C:\ML\imagetest\a8.png',"r")
image.append(image4)
image5 = Image.open(r'C:\ML\imagetest\a12.png',"r")
image.append(image5)
image6 = Image.open(r'C:\ML\imagetest\1.png',"r")
image.append(image6)
image7 = Image.open(r'C:\ML\imagetest\3.png',"r")
image.append(image7)
image.append(image1)
image.append(image2)
image.append(image3)
size = (1366,768)
ora = imageOragin(size, *image)
path = 'C:\\ML\\imagetest\\'
files = os.listdir(path)
for iinfiles:
print path+i
imaged = Image.open(path+i, "r")
print ora.cmp(imaged)
- 机器学习决策树算法解决图像识别
- 机器学习算法---决策树
- 机器学习算法-决策树
- 机器学习算法-决策树
- 机器学习--决策树算法
- 机器学习-算法--决策树
- 机器学习-决策树算法
- 机器学习:决策树算法
- 机器学习算法-决策树
- 机器学习算法---决策树
- 机器学习---决策树算法
- 机器学习算法---决策树
- 机器学习中的决策树算法
- 机器学习算法-决策树ID3
- 复习机器学习算法:决策树
- [Java][机器学习]决策树算法
- 机器学习--决策树(ID3)算法
- 机器学习算法-决策树理论
- 24位真彩色图像转换为16位高彩色图像的实现方法及效果改进
- 基于中值滤波或双边滤波方式的图像去雾效果的研讨。
- 自己编码使用去色、曲线、色阶算法实现照片怀旧特效。
- Universal Image Loader 学习笔记-图片显示选项
- 关于《半反去雾算法》一文的四宗罪。
- 机器学习决策树算法解决图像识别
- 一年去雾算法研究的总结。
- 动态规划_0-1背包问题
- 图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting
- 2016-12-19
- JDE 开发-函数
- 一种具有细节保留功能的磨皮算法。
- 由Photoshop高反差保留算法原理联想到的一些图像增强算法。
- $$和$BASHPID区别