DM/ML学习实践(一)

//数据挖掘&机器学习实践

1.简单的手写数字识别

原理:可以先通过多次手写的图片生成训练集,然后利用knn就行了……代码如下(下面代码需要安装PIL/numpy库,PIL安装有点坑==官方的貌似还有点问题。。。)

  1 //knn.py
  2 from numpy import *
  3 import operator
  4 import os
  5
  6 def createDataSet():
  7     group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
  8     labels = [‘A‘, ‘A‘, ‘B‘, ‘B‘]
  9     return group, labels
 10
 11 def classify0(inX, dataSet, labels, k):
 12     dataSetSize = dataSet.shape[0]
 13     diffMat = tile(inX, (dataSetSize, 1)) - dataSet
 14     sqDiffMat = diffMat**2
 15     sqDistances = sqDiffMat.sum(axis=1)
 16     distances = sqDistances**0.5
 17     sortedDistIndicies = distances.argsort()
 18     classCount={}
 19     for i in range(k):
 20         voteIlabel = labels[sortedDistIndicies[i]]
 21         classCount[voteIlabel] = classCount.get(voteIlabel,0)+1
 22     sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
 23     return sortedClassCount[0][0]
 24
 25 def file2matrix(filename):
 26     fr = open(filename)
 27     numberOfLines = len(fr.readlines())         #get the number of lines in the file
 28     returnMat = zeros((numberOfLines,3))        #prepare matrix to return
 29     classLabelVector = []                       #prepare labels return
 30     fr = open(filename)
 31     index = 0
 32     for line in fr.readlines():
 33         line = line.strip()
 34         listFromLine = line.split(‘\t‘)
 35         returnMat[index,:] = listFromLine[0:3]
 36         classLabelVector.append(round(float(listFromLine[-1])))
 37         index += 1
 38     return returnMat,classLabelVector
 39
 40 def autoNorm(dataSet):
 41     minVals = dataSet.min(0)
 42     maxVals = dataSet.max(0)
 43     ranges = maxVals-minVals
 44     normDataSet = zeros(shape(dataSet))
 45     m = dataSet.shape[0]
 46     normDataSet = dataSet-tile(minVals, (m, 1))
 47     normDataSet = normDataSet/tile(ranges, (m, 1))
 48     return normDataSet, ranges, minVals
 49
 50 def datingClassTest():
 51     hoRatio = 0.1
 52     datingDataMat, datingLabels = file2matrix(‘C:\\Python27\\source.txt‘)
 53     normMat, ranges, minVals = autoNorm(datingDataMat)
 54     m = normMat.shape[0]
 55     numTestVecs = int(m*hoRatio)
 56     errorCount = 0
 57     for i in range(numTestVecs):
 58         classifierResult = classify0(normMat[i,:], normMat[numTestVecs:m, :], 59                                      datingLabels[numTestVecs:m], 3);
 60         print "result :%d, the real answer is:%d" % (classifierResult, datingLabels[i])
 61         if (classifierResult != datingLabels[i]): errorCount += 1.0
 62     print "the total error rate is : %f" % (errorCount/float(numTestVecs))
 63
 64 def img2vector(filename):
 65     returnVect = zeros((1, 1024))
 66     fr = open(filename, ‘r‘)
 67     for i in range(32):
 68         lineStr = fr.readline()
 69         for j in range(32):
 70             returnVect[0, 32*i+j] = int(lineStr[j])
 71     return returnVect
 72
 73 def handwritingClassTest():
 74     hwLabels = []
 75     trainingFileList = os.listdir(‘D:\\PDF_BOOK\\ML\\machinelearninginaction\\Ch02\\traing\\trainingDigits‘)
 76     m = len(trainingFileList)
 77     trainingMat = zeros((m, 1024))
 78     for i in range(m):
 79         fileNameStr = trainingFileList[i]
 80         fileStr = fileNameStr.split(‘.‘)[0]
 81         classNumStr = int(fileStr.split(‘_‘)[0])
 82         hwLabels.append(classNumStr)
 83         trainingMat[i,:] = img2vector(‘D:\\PDF_BOOK\\ML\\machinelearninginaction\\Ch02\\traing\\trainingDigits\\%s‘ % fileNameStr)
 84     testFileList = os.listdir(‘D:\\PDF_BOOK\\ML\\machinelearninginaction\\Ch02\\traing\\testDigits‘)
 85     errorCount = 0.0
 86     mTest = len(testFileList)
 87     for i in range(mTest):
 88         fileNameStr = testFileList[i]
 89         fileStr = fileNameStr.split(‘.‘)[0]
 90         classNumStr = int(fileStr.split(‘_‘)[0])
 91         vectorUnderTest = img2vector(‘D:\\PDF_BOOK\\ML\\machinelearninginaction\\Ch02\\traing\\testDigits\\%s‘ % fileNameStr)
 92         classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3)
 93         print "the classifier came back with:%d, the real answer is:%d" % (classifierResult, classNumStr)
 94         if (classifierResult != classNumStr): errorCount += 1.0
 95     print "\nthe total number of errors is %d" % errorCount
 96     print "\nthe total error rate is %f" % (errorCount/float(mTest))
 97
 98 def judgeClass(filename):
 99     hwLabels = []
100     trainingFileList = os.listdir(‘D:\\PDF_BOOK\\ML\\machinelearninginaction\\Ch02\\traing\\trainingDigits‘)
101     m = len(trainingFileList)
102     trainingMat = zeros((m, 1024))
103     for i in range(m):
104         fileNameStr = trainingFileList[i]
105         fileStr = fileNameStr.split(‘.‘)[0]
106         classNumStr = int(fileStr.split(‘_‘)[0])
107         hwLabels.append(classNumStr)
108         trainingMat[i, : ] = img2vector(‘D:\\PDF_BOOK\\ML\\machinelearninginaction\\Ch02\\traing\\trainingDigits\\%s‘ % fileNameStr)
109     testVector = img2vector(filename)
110     result = classify0(testVector, trainingMat, hwLabels, 3)
111     return result

knn.py

 1 import Image, ImageDraw, ImageFont, ImageFilter
 2 import random
 3 import array
 4 from numpy import *
 5 import sys
 6 import knn
 7
 8 s = ‘2‘
 9
10 filename = ‘C:\\Users\\lg\\Desktop\\‘ + s + ‘.txt‘
11 im = Image.open(‘C:\\Users\\lg\\Desktop\\‘+s+‘.png‘)
12 f = open(filename, ‘w+‘)
13
14 data = zeros(32*32)
15 for x in range(32):
16     for y in range(32):
17         val = 1
18         if im.getpixel((x, y)) == (255, 255, 255):
19             val = 0
20         data[32*y+x] = val
21
22 for x in range(32):
23     for y in range(32):
24         f.write(str(int(data[32*x+y])))
25     if (x != 31): f.write(‘\n‘)
26 f.close()
27 print knn.judgeClass(filename)

test.py

后续的功能或者识别加强慢慢再补==,先挖坑,慢慢填。。。

时间: 2024-10-21 20:06:03

DM/ML学习实践(一)的相关文章

深度学习实践系列(2)- 搭建notMNIST的深度神经网络

如果你希望系统性的了解神经网络,请参考零基础入门深度学习系列,下面我会粗略的介绍一下本文中实现神经网络需要了解的知识. 什么是深度神经网络? 神经网络包含三层:输入层(X).隐藏层和输出层:f(x) 每层之间每个节点都是完全连接的,其中包含权重(W).每层都存在一个偏移值(b). 每一层节点的计算方式如下: 其中g()代表激活函数,o()代表softmax输出函数. 使用Flow Graph的方式来表达如何正向推导神经网络,可以表达如下: x: 输入值 a(x):表示每个隐藏层的pre-acti

Nagios学习实践系列——基本安装篇

开篇介绍 最近由于工作需要,学习研究了一下Nagios的安装.配置.使用,关于Nagios的介绍,可以参考我上篇随笔Nagios学习实践系列--产品介绍篇 实验环境 操作系统:Red Hat Enterprise Linux Server release 6.0 (Santiago)   64 bit. 注意,Nagios只能安装在Linux或Unix平台,不支持Windows平台,当然,它可以监控Windows平台. 环境准备 Apache 和PHP 不是安装Nagios所必须的,其实也可以说

Nagios学习实践系列

其实上篇Nagios学习实践系列--基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研究一下Nagios的配置,了解一下基本的配置和了解各类配置文件. Nagios配置目录 Nagios的配置文件位于etc目录下(/usr/local/nagios/etc)如下图所示: 配置文件简介 配置文件名 功能描述 cgi.cfg 控制CGI访问的配置文件 nagios.cfg 主配置文件:主

Appium学习实践(四)结构优化

随着我们测试脚本中的用例越来越多,我们不可能将所有的用例都放在同一个脚本中,所以我们需要优化我们的结构.将脚本放在一个文件夹中,再通过别的脚本来执行脚本.这样,我们也可以有选择性的执行我们的脚本 先来看一下现在的目录结构 测试脚本统一放到了test_case文件夹中,注意这个文件夹中要添加一个__init__.py的文件,只要是这个名字就行了,内容为空 因为我们要导入这个文件夹中的module,所以我们先构建一个package,而package必须包含一个__init__.py文件 然后来看下我

使用sklearn进行集成学习——实践

系列 <使用sklearn进行集成学习——理论> <使用sklearn进行集成学习——实践> 目录 1 Random Forest和Gradient Tree Boosting参数详解2 如何调参? 2.1 调参的目标:偏差和方差的协调 2.2 参数对整体模型性能的影响 2.3 一个朴实的方案:贪心的坐标下降法 2.3.1 Random Forest调参案例:Digit Recognizer 2.3.1.1 调整过程影响类参数 2.3.1.2 调整子模型影响类参数 2.3.2 Gr

学习实践:使用模式,原则实现一个C++自动化测试程序

个人编程中比较喜欢重构,重构能够提高自己的代码质量,使代码阅读起来也更清晰.但是重构有一个问题,就是如何保证重构后带代码实现的功能与重构前的一致,如果每次重构完成后,对此不闻不问,则会有极大的风险,如果每次重构后,都进行一边测试,则工作量会很巨大,最终可能是即使代码有重构的欲望,也会尽量克制住,不去重构.除非代码能够进行自动化测试.实际上进行测试的是接口,而不是所有代码,只要能够保持接口不变,自动化测试的工作量也没有想象中的巨大.其实我们在单元测试的时候,会测试各种异常情况,只不过,没有将这些测

深度学习实践系列之--身份证上汉字及数字识别系统的实现(上)

前言: 本文章将记录我利用深度学习方法实现身份证图像的信息识别系统的实现过程,及学习到的心得与体会.本次实践是我投身AI的初次系统化的付诸实践,意义重大,让自己成长许多.终于有空闲的时间,将其记录,只为更好的分享与学习. 目录: 1.本人的主要工作 2.关键技术 3.模型训练 4.系统设计及实现 5.总结 正文: 一.本人的主要工作 深度学习技术与传统模式识别技术相比,免去人工提取特征,识别率更高.我基于深度学习的技术背景,主要的研究内容如下: 1)身份证图像涉及个人隐私,很难获取其数据训练集.

排序学习实践

排序学习实践---ranknet方法 http://www.cnblogs.com/LBSer/p/4439542.html 1 背景 随着移动互联网的崛起,越来越多的用户开始习惯于从手机完成吃.喝.玩.乐.衣.食.住.行等各个方面的需求.打开手机,点开手淘.美团等APP,商品玲玲满目,而让用户将所有商品一页页看完已经不现实,通常情况下用户也就查看前几页,如果找不到满意的商品则退出,从而造成流单.因此如何对商品进行排序使得用户能尽快完成购买流程已经成为这些平台的重要攻克方向. 图1 手机淘宝.美

前端学习实践笔记--JavaScript深入【1】

这一年中零零散散看过几本javascript的书,回过头看之前写过的javascript学习笔记,未免有点汗颜,突出“肤浅”二字,然越深入越觉得javascript的博大精深,有种只缘身在此山中的感觉,茫茫然而不得其要领,索性在一边写博文中,求得突破,乃至更上一层楼. 看过的书籍推荐: <javascript语言精粹> Douglas Crockford <javascript设计模式> Addy Osmani <javascript设计模式> Ross Harmes