日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习实战之k-近邻算法

發布時間:2024/9/30 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习实战之k-近邻算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


python算法實例

#The first machine learning algorithm--kNN'''導入科學計算包Numpy和運算符模塊 ''' from numpy import * import operatordef creatDataSet():group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])labels=['A','A','B','B']return group,labels''' inX是用于分類的輸入向量,dataSet輸入的訓練樣本集, labels標簽向量,k確定選擇最近鄰居的數目 ''' def classify0(inX,dataSet,labels,k):#計算距離dataSetSize=dataSet.shape[0] #數據集的行diffMat=tile(inX,(dataSetSize,1))-dataSetsqDiffMat=diffMat**2sqDistance=sqDiffMat.sum(axis=1)distances=sqDistance**0.5sortedDistanceIndicies=distances.argsort()classCount={}#選擇距離最小的K個點for i in range(k):voteIlabel=labels[sortedDistanceIndicies[i]]classCount[voteIlabel]=classCount.get(voteIlabel,0)+1#排序sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)return sortedClassCount[0][0]# group,labels=creatDataSet() # classify0([0,0],group,labels,3) # print(classify0([0,0],group,labels,3))''' 準備數據:從文本文件中解析數據,將文本記錄轉為numpy的解析程序 ''' def file2matrix(filename):fr=open(filename)arrayOLines=fr.readlines()numberOfLines=len(arrayOLines) #得到文件行數returnMat=zeros((numberOfLines,3)) #創建0矩陣,用作返回的numpy矩陣classLabelVector=[]index=0#解析文件數據到列表for line in arrayOLines:line=line.strip() #去掉所有回車字符listFromLine=line.split('\t') #使用tab字符將上一步得到的整行數據分割為一個元素列表returnMat[index,:]=listFromLine[0:3] #選取前三個元素,存到特征矩陣中classLabelVector.append(int(listFromLine[-1])) #-1代表最后一列元素index+=1return returnMat,classLabelVectordatingDataMat,datingLabels=file2matrix('datingTestSet.txt')''' 分析數據:使用matplotlib創建散點圖 ''' import matplotlib import matplotlib.pyplot as plt fig=plt.figure() ax=fig.add_subplot(111) ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15.0*array(datingLabels),15.0*array(datingLabels)) #使用datingDataMat矩陣第二列和第三列的數據 plt.show ''' 準備數據:歸一化數據,將數據的取值范圍處理為0到1或者-1到1 autoNorm()函數可以自動將數字特征值轉化為0到1的區間 tile(x,(2))函數將x將函數沿著X軸擴大兩倍,tile(x,(1,2))將x向Y軸擴大1倍,向X軸擴大2倍 ''' def autoNorm(dataSet):minVals=dataSet.min(0) #使得函數可以從列中選取最小值,列!!!maxVals=dataSet.max(0) #最大特征值ranges=maxVals-minValsnormDataSet=zeros(shape(dataSet))m=dataSet.shape[0] #1000,和前面特征矩陣的行數相同normDataSet=dataSet-tile(minVals,(m,1)) #統一特征矩陣1000x3和minVals、range(1x3)的大小normDataSet=normDataSet/tile(ranges,(m,1)) #特征值相除return normDataSet,ranges,minValsnormMat,ranges,minVals=autoNorm(datingDataMat)''' 測試算法:作為完整程序驗證分類器 ''' def datingClassTest():hoRatio=0.1datingDataMat,datingLabels=file2matrix('datingTestSet.txt')normMat,ranges,minVals=autoNorm(datingDataMat)m=normMat.shape[0]numTestVecs=int(m*hoRatio)errorCount=0.0for i in range(numTestVecs):classifierResult=classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)print("the classifier came back with: %d, the real answer is: %d" \% (classifierResult,datingLabels[i]))if (classifierResult !=datingLabels[i]):errorCount+=1.0print("the total error rate is %f" %(errorCount/float(numTestVecs)))

總結

以上是生活随笔為你收集整理的机器学习实战之k-近邻算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。