




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
朴素分类算朴素(NaiveBayes,NB)算法是基于定理与特征条件朴素的思想就是根据某些个先验概率计算Y变量属于某个类别的后验概率,也就是根据先前的有关数据估计未来某个长裤,则有一半穿长裤,一半穿裙子。假设在校园中随机抽取一个穿长裤的学生,推断该学生是的概率?P(60%P()=P(长裤|)=P(裙子|)=求:P(|长裤)—穿长裤人数中是的概率的总人数,两者相除就是长裤中的概率。假设学校人数为U穿长裤总人数=穿长裤的男生人数+穿长裤的人=60%*U+40%*U穿长裤的人数=40%*U*随机抽取一个穿长裤的学生是的概 穿长裤的人数/穿长裤总人 40%*U*50% (60%*U+40%*U 件B,学生是的概率是P(B),求:抽取的这个穿长裤学生是的概 |
)P(A(长裤
=60%
P(A|B)P(B|A)*P(A)=P( PA|B)*P(B)P(B|A)*PP(A)叫做A的先验概率,即一般情况下,认为A发生的概率P(B|A)ABP(A|B)BAP(B)B假设现在有一堆邮件,正常邮件的比例是80%,邮件的比例邮件,这封邮件中包含Viagra单词,求这封邮件是邮件的概ViagraViagra单词。那么根据可得包含Viagra单词的邮件是邮件的概率P(spam|Viagra)P(Viagra|spam)*也是已知其中P(Viagra|spam)表示在邮件中出现Viagra单词的概率,通封邮件是邮件的概率为:P(spam|Viagra)P(Viagra|spam)* 4/20*
通过同样的计算可以得到,含有Viagra单词但不是邮件的概率为0.2。那么可以认为这封邮件是邮件的概率比较大。这里的特征时,如何扩展?个单词,求这封邮件是邮件的概率、不是邮件的概率?2 2 W) W4|spam)* W12 P(spam|=P(W1|spam)*P(W2|spam)*P(W3|spam)*P(W4|spam)*P(spam)P(W1)*P(W2)*P(W3)*P(W4)=(4/20)*(10/20)*(20/20)*(12/20)*(20/(5/100)*(76/100)*(92/100)*(35/=
2 2 W) W4|ham)* W12 =P(W1|ham)*P(W2|ham)*P(W3|ham)*P(W4|ham)*P(ham)P(W1)*P(W2)*P(W3)*P(W4)=(1/80)*(66/80)*(72/80)*(23/80)*(80(5/100)*(76/100)*(92/100)*(353.估 W W) W4|spam)* W =P(W1|spam)*P(W2|spam)*P(W3|spam)*P(W4|spam)*由于P(W3|spam)的概率为0/20,会导致整个结果是邮件的概率0,那么就否定了其他单词出现的权重。以上例子如果四个单词都出现情况下计算是否是邮件,出现P3|m)的概率为0/2,可以增加4封邮件,使4封邮件中每个邮件中只有一个单词出现,这样就避免了邮件中有的单词出现概率为0的情况。同样在不是邮件中也增加4封,避Python案使用pythonpythonpipinstallpipinstallpipinstallD:/PythonInstallPackage/numpy-1.9.2+mkl-cp27-none-win_amd64.whlpipinstallD:/PythonInstallPackage/scipy-0.16.0-cp27-none-win_amd64.whlpipinstallD:/PythonInstallPackage/scikit_learn-0.16.1-cp27-none-win_amd64.whlpipinstallD:/PythonInstallPackage/python_dateutil-2.4.2-py2.py3-none-any.whlpipinstallD:/PythonInstallPackage/six-1.9.0-py2.py3-none-any.whlpipinstallD:/PythonInstallPackage/pyparsing-2.0.3-py2-none-any.whlpipinstallD:/PythonInstallPackage/matplotlib-1.4.3-cp27-none-importimportimportsysecsimportfromsklearn.naive_bayesimportfromsklearn.feature_extraction.textimportifname'main': corpus=[]labels=[]corpus_test=[]labels_test=f=codecs.open("i:/ML/sms_spam.txt","rb")count=0whileline=ifcount==count=count+1ifcount=count+line=line.split(",")label=line[0]sentence=line[1]if"ham"==label:elif"spam"==label:ifcount>5550:if"ham"==label:elif"spam"==label:#CountVectorizer是将文本向量转换成稀疏表示数值向量(字符频率向量)vectorizer将文fea_train=vectorizer.fit_transform(corpus)printvectorizer.get_feature_names()printfea_test=vectorizer2.fit_transform(corpus_test)rintvectorizer2.get_feature_names()printfea_test.toarray()#createtheMultinomialNaiveBayesianClassifier#alpha=1 clf=MultinomialNB(alpha=1)#pred=clf.predict(fea_test);forpinpred:ifp==print 邮件Scala案objectobjectNaive_bayesdefmain(args:Array[String])//1构建Sparkvalconf=newvalsc=new valdata=valparsedData=data.map{linevalparts=LabeledPoint(parts(0).toDouble,Vectors.dense(parts(1).split}valsplits=parsedData.randomSplit(Array(0.9,0.1),seed=valtraining=valtest=//分类模型模型,并训练valmodel=NaiveBayes.train(training,lambda= valpredictionAndLabel=test.map(p=>(model.predict(p.features),valprint_predict=predictionAndLabel.take(10020)println("prediction"+"\t"+"label")for(i<-0toprint_predict.length-1){println(print_predict(i)._1+"\t"+print_predict(i)._2)}valaccuracy=1.0*.filter(x=>x._1==x._2).count()/test.count()valModelPath="naive_bayes_model"model.save(sc,ModelPath)valsameModel=NaiveBayesModel.load(sc,}}KNN成方法,也是最简单的机器学习算法之一,有监督算法。该方大多数属于某一个类别,则该样本也属于这个类别。KNN的邻居来推断出你的类别,KNN如果K=3,绿色圆点的最近的3个邻居是2个红色角形和1K20KKK集中文档总数为n,那么KNNO(n)的K个邻居中大容量类的样本占多数。解决:可以采用权值的方法,根据归一化newValue(oldValuemax欧式距离:也称得距离,在一个N维度的空间里,求两个点(xx(xx (xx)2(xx)2(yy (xx)2(yy)2(zz 标的x坐标相减取绝对值,y坐标相减取绝对值,再加和,cx1x2+y1
px1kp是对多个距离度量的概括性表述。定义:两个n维变量(可以理解为nnax11x12x1npx1kp
就是切比距离切比距离:国际象棋中,国王可以直行、横行、斜行。国王走到格(x2,y2)最少需要多少步?这个距离就是切比距离。空间中的计算为:dmax(x1x2,y1y2)KNNimportimportnumpyasnpimportoperator#matplotata测试数据集的某行,dataSetlabels训练数据集的类别,kk的defdataSetSizedataSetSize= printdataSetSize=',dataSetSizediffMatnp.tile(normDatadataSetSize,1dataSetsqDiffMat=diffMat**#sqDiffMat.sum(axis=0)指定对数组b对每列求和,sqDistancessqDiffMat.sum(axis1)#欧式距离最后开方distance=sqDistances**#argsort将x中的元素从小到大排序,提取其对应的indexsortedDistIndicies= classCount={}foriinrange(k): abel= abel]=classCount.get(vo abel,0)+1sortedClassCount=returndeffr= arrayOflines=numOfLines= print"numOfLines=",#numpy.zeros创建给定类型的矩阵numOfLines行,3列returnMat=np.zeros((numOfLines,3))classLabelVector=[]index=forlineinarrayOflines:line=line.strip()listFromline=line.split('\t')returnMat[index,:]=listFromline[0:3]index+=1return def minVals=dataSet.min(0)maxVals=dataSet.max(0)ranges=maxVals-minVals#dataSet.shape[0shape[1]m= normDataSet=#np.tile(minVals,(m,1))在行的方向上重复minValsm次即 复munVals1次,即 normDataSet=dataSet-np.tile(minVals,(m,1))normDataSet=normDataSet/np.tile(ranges,(m,1))returnnormDataSet,ranges,minValsdefdatingClassTest():hoRatio=0.1datingDataMat,datingLabelsfile2matrix('datingTestSet2.txt')normMat,ranges,minValsautoNorm(datingDataMat)#m为行数=1000mnormMat.shape[0] print'm%d行numTestVecs=int(m*hoRatio)errorCount=0.0foriin1000datingLabels[numTestVecs:mKclassifierResultprint'模型预测值dd'%(classifierResult,datingLabels[i])if(classifierResult!=datingLabels[i]):errorCount+=errorRate=errorCount/printprint'f%(1-return1-definput_man=datingDataMat,datingLabels=file2matrix('datingTestSet2.txt')normMat,ranges,minVals=autoNorm(datingDataMat)result=classify((input_man- 的人是:',resultList[result-ifname=='main':acc=datingClassTest()if(acc>0.9): 调用pythonScikit-learn实现KNNfromfromsklearn.neighborsimportNearestNeighborsimportnumpyasnpfromKNNDateOnHandimportdatingDataMat,datingLabels=file2matrix('datingTestSet2.txt')normMat,ranges,minVals=autoNorm(datingDataMat)nbrs=NearestNeighbors(n_neighbors=3).fit(normMat)input_man=[30000,3,2]#S=(input_man- distances,indices=nbrs.kneighbors(S)printindicesprint#classCount classCount={}foriinrange(3): abel= abel]=classCount.get(vo abel,0)+1sortedClassCount=resultList=['没感觉','看起来还行','极具 printresultList[sortedClassCount[0][0]-KNNimportimportimportnumpyasfromfromKNNDateOnHandimportdefimg2vector(filename):returnVectnp.zeros((1,1024))fr=foriinrange(32):lineStr=fr.readline()forjinrange(32):returnVect[0,32*i+j]=int(lineStr[j])returnreturnVectdefIdentifImgClassTest():hwLabels=[]#训练街TrainData下所有的文件和文件夹trainingFileListos.listdir('TrainData')m=len(trainingFileList)#zeros((m,1024返回一个m1024trainingMat=np.zeros((m,1024))foriinrange(m):fileNameStrtrainingFileList[i]fileStrfileNameStr.split('.')[0]classNumStr=int(fileStr.split('_')[0])trainingMat[iimg2vector('TrainData/%sfileNameStr) testFileList=os.listdir('TestData')errorCount=0.0mTest=len(testFileList)foriinrange(mTest):fileNameStr=testFileList[i]fileStr=fileNameStr.split('.')[0]classNumStr=vectorUnderTest=img2vector('TestData/%s'%fileNameStr)classifierResultclassify(vectorUnderTesttrainingMat,hwLabels,3)print"识别出的数字是:%d,真实数字是:%d"%(classifierResult,if(classifierResult!=errorCounterrorCount+=print"\n%derrorCounterrorRate=errorCount/float(mTest)print"\n正确率:%f"%(1-errorRate)ifname=='main':的数据属于哪一类。聚类是一种无监督学习,聚类是指事先没有相似度比较低,则聚类效果越好。K-meansK-meansKK,means聚类中数据的均值作为该簇的中心,也称为质心。K-means聚类试需要一种对数据衡量相似度的计算方法,K-means算法是典型的基K-means聚类会随机在这些点中找到三个点,然后计算所有的样本K下,类的平均畸变程度变化大,说明,k=20,那么每个数据都是一类,类与类之间的相似度大,类值,直到得到最好的聚类结果。K-meansimportimportnumpyasnpdefloadDataSet(fileName):dataMatdataMat=fr=forlineincurLineline.strip().split('\t')切分后的每个列表中的元素,以float形式返fltLine=map(float,curLine)return离defdistEclud(vecA,returnnp.sqrt(np.sum(np.power(vecAvecB2)))defrandCent(dataSetk):列数,2n=centroids是一个3*2的矩阵,用 三个中心点的坐centroids=np.mat(np.zeros((k,n)))forjinrange(n):minJmin(dataSet[:,j])rangeJ=float(max(dataSet[:,j])-array2minJrangeJ*np.random.rand(k,1)#转换成k*1矩阵赋值给centroidscentroids[:,j]=np.mat(array2)returncentroidsdefkMeans(dataSetk,distMeas=distEclud,createCent=randCent):#计算矩阵所有行数80mnp.shape(dataSet)[0]y.mat将二维数组转换成矩阵 ssmentnp.mat(np.zeros((m,2)))centroids=createCent(dataSet,k) printcentroidsclusterChanged=TruewhileclusterChanged=foriinrange(m):#np.inffloatminDist=np.infminDist=np.infminIndex=-1forjinrange(k):distJI=distMeas(centroids[j,:],dataSet[i,:])ifdistJI<minDist:minDistdistJIminIndex=jifclus ssment[i,0]!=minIndex:clusterChanged=#将当前点的类别号和最小距离赋值给clus ssment[i,:]=minIndex,minDistforcentinptsInClust=dataSet[np.nonzero(clus centroids[cent,:]=np.mean(ptsInClust,returncentroids, ifname'main'80*2dataMat=np.mat(loadDataSet('./testSet.txt'))centroids, ssmentkMeans(dataMat,k,distMeas=distEclud,createCent=randCent)printcentroidsprint matplotlibimportimportnumpyasimportmatplotlib.pyplotaspltfromsklearn.clusterimportKMeansfromsklearn.datasetsimportplt.figure(figsize=(12,n_samples=random_state=
shuffle:洗乱,默认值是True x,ymake_blobs(n_samples=n_samplesrandom_state=random_state)y_pred=KMeans(n_clusters=3,#subplot绘制多个子图,221等价于2,2,1#scatter绘制散点图plt.scatter(x[:,0],x[:,1],c=y_pred)transformation=[[0. ,-0. ],[-0. ,0. #numpy.dot矩阵相乘X_aniso=np.dot(x,y_pred=KMeans(n_clusters=3,random_state=random_state).fit_predict(X_aniso)plt.scatter(X_aniso[:,0],X_aniso[:,1],c=y_pred)#vstack是合并矩阵,将y=0类别的取出500行,y=1类别的取出100行,y=2类别的取出10行X_filtered=np.vstack((x[y==0][:500],x[y==1][:100],x[y==2][:10]))y_predKMeans(n_clusters=3random_state=random_state).fit_predict(X_filtered)plt.scat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程概算考试题及答案大全
- 2025年合肥创和资产管理有限责任公司第一批人员招聘2人模拟试卷及答案详解(夺冠系列)
- 产品具体信息与功能达标保证承诺书5篇
- 产品品质检测与优化分析工具集
- 高考试题分解图解及答案
- 高级职业农民考试题及答案
- 2025年政府采购考试试题及答案
- 2025年丙肝防治培训考核试题(+答案解析)
- 人行法律笔试题目及答案
- 销售客服笔试题目及答案
- 2025年全国统一高考英语Ⅰ卷(含解析)
- 小儿过敏性紫癜护理常规
- 纪检干事考试题及答案
- 2025至2030年中国聚氨酯行业市场全景调查及投资前景展望报告
- 脑卒中中西医综合治疗
- 敬老院财务管理培训
- 小儿肠炎的症状及治疗
- 2025年发展对象培训班考试试题及参考答案
- 河北承德市隆化县“4·8”养老院火灾事故案例学习警示教育
- 胰源性糖尿病的护理
- 北京花园乡村建设导则
评论
0/150
提交评论