数据分类

python 数据分类

    • 1、Python数据建模概述
    • 2、Python数据分类实现过程
    • 3、常见的分类算法
    • 4、KNN算法与手写体数字识别
      • 4.1 KNN算法的实现步骤
      • 4.2 KNN算法的python实现
      • 4.3 手写体数字识别

上一篇: 文本相似性

1、Python数据建模概述

  • 数据建模指的是对现实世界各类数据的抽象组织,建立一个适合的模型对数据进行处理。
  • 在数据分析与挖掘中,我们通常需要根据一些数据建立起特定的模型,然后处理。
  • 模型的建立需要依赖于算法,一般,常见的算法有分类、聚类、关联、回归等。

2、Python数据分类实现过程

数据分类主要处理现实生活中的分类问题,一般处理思路如下:

  • 1、首先明确需求并对数据进行观察
  • 2、其次,确定算法
  • 3、确定步骤
  • 4、编程实现

3、常见的分类算法

常见的分类算法主要有:

  • 1、KNN算法
  • 2、贝克斯方法
  • 3、决策树
  • 4、人工神经网络
  • 5、支持向量机(SVM)

4、KNN算法与手写体数字识别

4.1 KNN算法的实现步骤

  • 1、处理数据
  • 2、数据向量化
  • 3、计算欧几里得距离
  • 4、根据距离进行分类

4.2 KNN算法的python实现

from numpy import *
import operator
def knn(k,testdata,traindata,labels):
	traindatasize=traindata.shape[0]  # 数据行数,即数据个数
	# 从列方向扩展
	# tile(a,(size,1))
	dif=tile(testdata,(traindatasize,1))-traindata  #扩展为相同维度后计算差值
	sqdif=dif**2  # 平方
	sumsqdif=sqdif.sum(axis=1) # 各列平方和
	distance=sumsqdif**0.5     # 计算距离
	sortdistance=distance.argsort() #距离排序,得到序号
	count={}
	for i in range(0,k):
		vote=labels[sortdistance[i]]    # 投票结果,类别
		count[vote]=count.get(vote,0)+1 # 统计类别出现次数
	sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True)
	return sortcount[0][0]

将图片处理为文本

#将图片处理为文本
#先将所有图片转为固定宽高,比如32*32,然后再转为文本
#pillow
from PIL import Image
im=Image.open("C:/Users/xuefa/Pictures/Camera Roll/111.jpg") # 打开图片
fh=open("C:/Users/xuefa/Pictures/Camera Roll/111.txt","a") # 打开文件
# im.save("C:/Users/xuefa/Pictures/Camera Roll/tt.bmp")       # 保存为其他格式
width=im.size[0]             # 获取图片的长和宽
height=im.size[1]
# k=im.getpixel((1,9))         # 获取像素,RGB
for i in range(0,width):
	for j in range(0,height):
		cl=im.getpixel((i,j))  # 获取RGB
		clall=cl[0]+cl[1]+cl[2]
		if(clall==0):
			# 黑色
			fh.write("1")
		else:
			fh.write("0")
	fh.write("\n")
fh.close()

4.3 手写体数字识别

from numpy import *
import operator
from os import  listdir
def knn(k,testdata,traindata,labels):
	traindatasize=traindata.shape[0]  # 数据行数,即数据个数
	# 从列方向扩展
	# tile(a,(size,1))
	dif=tile(testdata,(traindatasize,1))-traindata  #扩展为相同维度后计算差值
	sqdif=dif**2  # 平方
	sumsqdif=sqdif.sum(axis=1) # 各列平方和
	distance=sumsqdif**0.5     # 计算距离
	sortdistance=distance.argsort() #距离排序,得到序号
	count={}
	for i in range(0,k):
		vote=labels[sortdistance[i]]    # 投票结果,类别
		count[vote]=count.get(vote,0)+1 # 统计类别出现次数
	sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True)
	return sortcount[0][0]

#将图片处理为文本
#先将所有图片转为固定宽高,比如32*32,然后再转为文本
#pillow
from PIL import Image
im=Image.open("C:/Users/xuefa/Pictures/Camera Roll/111.jpg") # 打开图片
fh=open("C:/Users/xuefa/Pictures/Camera Roll/111.txt","a") # 打开文件
# im.save("C:/Users/xuefa/Pictures/Camera Roll/tt.bmp")       # 保存为其他格式
width=im.size[0]             # 获取图片的长和宽
height=im.size[1]
# k=im.getpixel((1,9))         # 获取像素,RGB
for i in range(0,width):
	for j in range(0,height):
		cl=im.getpixel((i,j))  # 获取RGB
		clall=cl[0]+cl[1]+cl[2]
		if(clall==0):
			# 黑色
			fh.write("1")
		else:
			fh.write("0")
	fh.write("\n")
fh.close()


# 加载数据
def datatoarray(fname):
	arr=[]
	fh=open(fname)
	for i in range(0,32):
		thisline=fh.readline()
		for j in range(0,32):
			arr.append(int(thisline[j]))
	return arr
arr1=datatoarray("data/testandtraindata/traindata/0_4.txt")
# print(arr1)

# 建立一个函数取文件名前缀
def seplabel(fname):
	filestr=fname.split(".")[0]
	label=int(filestr.split("-")[0])
	return label

# 建立训练数据集
def traindata():
	labels=[]
	trainfile=listdir("data/testandtraindata/traindata")#查看目录下的文件
	num=len(trainfile)
	# 长度1024(列),每一行存储一个文件
	# 用一个数组存储所有训练数据,行:文件总数,列:1024
	trainarr=zeros((num,1024))
	for i in range(0,num):
		thisfname=trainfile[i]
		thislabel=seplabel(thisfname)
		labels.append(thislabel)
		trainarr[i,:]=datatoarray("data/testandtraindata/traindata/"+thisfname)  #读取当前所有数据
	return trainarr,labels

# 用测试数据调用KNN算法去测试,看是否能够准确识别
def datatest():
    trainarr,labels=traindata()
    testlist=listdir("data/testandtraindata/testdata")
    tnum=len(testlist)
    for i in range(0,tnum):
        thistestfile=testlist[i]
        testarr=datatoarray("data/testandtraindata/testdata/"+thistestfile)
        rknn=knn(3,testarr,trainarr,labels)
        print(rknn)
datatest()
# #抽某一个测试文件出来进行试验
# trainarr,labels=traindata()
# thistestfile="data/testandtraindata/traindata/8_76.txt"
# testarr=datatoarray("data/testandtraindata/testdata/"+thistestfile)
# rknn=knn(3,testarr,trainarr,labels)
# print(rknn)

你可能感兴趣的:(Python学习篇)