《用Python实现数据分类的核心代码程序》_第1页
《用Python实现数据分类的核心代码程序》_第2页
《用Python实现数据分类的核心代码程序》_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《用Python实现数据分类的核心代码程序》.Python实现数据分类的核心代码程序,有离散和连续数据两种。

##离散数据分类

离散数据分类实际上是对离散数据的分类。在Python中,最常用的方法是基于KNN算法的分类。KNN是一种常用的机器学习分类方法,能用于判断处理一个数据实体可能属于哪一个类别。首先,我们需要建立一个K值,之后利用K值来对样本进行类别划分,具体过程如下:

1.收集训练数据:神经网络的输出取决于训练数据,因此首先要收集训练数据。

2.构建KNN算法模型:建立模型的第一步是建立一个K值,该K值代表模型中的距离的参数,它的值越大,对模型的拟合程度越大;反之,K值越小,模型的拟合程度越低。

3.测试数据样本:使用训练获得的KNN模型,在测试数据中查找K个最邻近的样本,接着,从这K个样本中找出现频率最多的类别,然后把测试样本分类到这个类别中。

下面是Python实现KNN算法分类离散数据的核心代码:

```python

importnumpyasnp

classKNN(object):

def__init__(self,K):

self.dataSet=None

self.dataSetName=None

self.K=K

#求欧式距离

defcalDistance(self,data_1,data_2):

dis=0

foriinrange(len(data_1)):

dis+=(data_1[i]-data_2[i])**2

returnnp.sqrt(dis)

#计算K个最近邻的类别

defKNNClassify(self,testData):

#获取测试样本中的每个特征

testData_temp=np.array(testData).T

#获取训练数据中的每个特征

TrainData_temp=self.dataSet.T[:-1]

#计算测试样本与训练数据的欧氏距离

dis=np.array([])

fordatainTrainData_temp:

dis=np.append(dis,np.array([self.calDistance(data,testData_temp)]))

#对计算出来的距离进行排序

dis_sort=dis.argsort()

#统计K个类别出现的次数

count={}

foriinrange(self.K):

tempClass=self.dataSetName[dis_sort[i]]

count[tempClass]=count.get(tempClass,0)+1

#获取类别出现的次数最多的类别

reault=sorted(count.iteritems(),lambdax,y:cmp(x[1],y[1]),reverse=True)

returnreault[0][0]

#构建实例

KNN_Classify=KNN(K=3)

#收集数据

KNN_Classify.dataSet=np.array([[1,2,1,2,'A'],

[2,2,3,2,'A'],

[0,2,1,2,'B'],

[1,2,3,3,'B']])

KNN_Classify.dataSetName=np.array(['A','A','B','B'])

#预测测试样本

KNN_Classify.KNNClassify([1,2,3,1])#返回B

```

##连续数据分类

连续数据分类实际上是对连续数据(使用概率)进行分类操作。连续数据分类常用的方法是基于贝叶斯算法的分类。贝叶斯分类算法基于贝叶斯定理,它可以计算类别概率、样本属于某个类别的概率。

在Python中,实现贝叶斯分类代码可以如下:

```python

importnumpyasnp

#计算先验概率

defCalPriorProb(dataSet):

numEntries=len(dataSet)

labelsCounts={}

foriinrange(numEntries):

curLabel=dataSet[i,-1]

ifcurLabelnotinlabelsCounts.keys():

labelsCounts[curLabel]=0

labelsCounts[curLabel]+=1

#计算每一类标签出现的概率

priorProb={}

forlabelinlabelsCounts.keys():

priorProb[label]=labelsCounts[label]*1.0/numEntries

returnpriorProb

#根据特征属性计算后验概率

defCalPosteriorProb(dataSet,featureIndex,featureValue):

PosteriorProb={}

#获得取值为featureValue的数据的总的条数

totalNum=0.0

totalLabelNum={}

#获取样本数据中,每一行特征值跟featureValue相等的数据集

tempDataSet=dataSet[np.nonzero(dataSet[:,featureIndex]==featureValue)[0],:]

foriinrange(len(tempDataSet)):

curLabel=tempDataSet[i,-1]

ifcurLabelnotintotalLabelNum.keys():

totalLabelNum[curLabel]=0

totalNum+=totalLabelNum[curLabel]

#计算每一类标签在特征值跟featureValue相等的情况下出现的概率

forlabelintotalLabelNum.keys():

PosteriorProb[label]=(totalLabelNum[label]*1.0)/totalNum

returnPosteriorProb

#贝叶斯算法分类器

defBayesClassify(dataSet,data):

numFeatures=np.shape(dataSet)[1]-1

P=CalPriorProb(dataSet)

foriinrange(numFeatures):

featureValue=data[i]

P=CalPosteriorProb(dataSet,i,featureValue)

bestLabel,_=sorted(P.iteritems(),lambdax,y:cmp(x[1],y[1]),reverse=True)[0]

returnbestLabel

if__name__=='__main__':

dataSet=np.array([[1,1,'A'],[2,2,'A'],[1,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论