91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

學習日志---knn算法實現

發布時間:2020-06-25 12:58:29 來源:網絡 閱讀:288 作者:wukong0716 欄目:開發技術

KNN算法實現:

提取文本:

import numpy as np

//提取文本
def loadDataSet(fileName):
    numFeat = len(open(fileName).readline().split(','))
    dataMat = []; labelMat = []
    fr = open(fileName)
    for line in fr.readlines():
        lineArr=[]
        line = line.strip()
        curline = line.split(',')
        for i in range(0,numFeat-1):
            lineArr.append(float(curline[i]))
        dataMat.append(lineArr)
        labelMat.append(float(curline[-1]))

    xMat = np.mat(dataMat)

    return xMat,labelMat

//訓練樣本標準化
def autoNorm(dataSet):
    minVals = dataSet.min(0)
    maxVals = dataSet.max(0)
    range = maxVals - minVals
    normDataSet = np.zeros(np.shape(dataSet))
    m = dataSet.shape[0]
    normDataSet = dataSet - np.tile(minVals,(m,1))
    normDataSet = normDataSet/np.tile(range,(m,1))
    return normDataSet

//講總樣本分為訓練樣本和檢測樣本
def classifyDataSet(normDataSet,labelMat):
    labDataSet = np.array(normDataSet.copy())
    testDataSet = []
    testResultSet = []
    classfiDataSet = []
    classfiResultSet = []
    size = labDataSet.shape[0]
    for j in range(size):
        if(j%50==0):
            testDataSet.append(labDataSet[j])
            testResultSet.append(labelMat[j])
        else:
            classfiDataSet.append(labDataSet[j])
            classfiResultSet.append(labelMat[j])
    return classfiDataSet,classfiResultSet,testDataSet,testResultSet

KNN

這里進入的是兩個數組,不是矩陣

import numpy as np
import operator as op

def classify(inX, dataSet, labels,k=7):
    dataSetSize = dataSet.shape[0]
    diffMat = np.tile(inX,(dataSetSize,1))-dataSet
    sqDiffMat = diffMat**2
    sqlDistances = sqDiffMat.sum(axis=1)
    distances = sqlDistances**0.5
    sortedDistIndices = distances.argsort()
    classCount = {}
    for i in range(k):
        voteLabel = labels[sortedDistIndices[i]]
        classCount[voteLabel] = classCount.get(voteLabel,0)+1
    sortedResult = sorted(classCount.iteritems(),key=op.itemgetter(1),reverse=True)
    return sortedResult[0][0]

main函數

import KNN
import fileOp
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)


dataMat,labelsMat = fileOp.loadDataSet('donate.txt')
normDataSet = fileOp.autoNorm(dataMat)
result = []
classfiDataSet,classfiResultSet,testDataSet,testResultSet = fileOp.classifyDataSet(normDataSet,labelsMat)
testDataSet = np.array(testDataSet)
classfiDataSet = np.array(classfiDataSet)

for i in range(testDataSet.shape[0]):
    result.append(KNN.classify(testDataSet[i,:],classfiDataSet,classfiResultSet,5))
print result
print testResultSet


ax.scatter(normDataSet[:,2],normDataSet[:,3],15.0*(np.array(labelsMat)+1),15.0*(np.array(labelsMat)+1))
plt.show()

注意:

    序列可以增加或減小,無shape操作

    數組有shape,轉置等操作,是基于某個軸進行操作的。數組有切片功能,一般用數據操作即可,矩陣用于運算。

    np.dot(arr.T,arr)可以用于計算內積


numpy

array和matrix之間的區別:參考http://www.aichengxu.com/view/12902



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南康市| 渑池县| 明星| 洛阳市| 临沭县| 平邑县| 德惠市| 丹棱县| 宜丰县| 旅游| 韶山市| 黎城县| 上杭县| 长寿区| 游戏| 瓦房店市| 嵊州市| 鹤壁市| 阿城市| 三门峡市| 宁远县| 永泰县| 鄱阳县| 霍州市| 望都县| 黑龙江省| 手游| 伽师县| 肇庆市| 崇义县| 商都县| 平罗县| 枝江市| 延庆县| 黄浦区| 佛坪县| 佳木斯市| 嵩明县| 鄂温| 司法| 庆元县|