机器学习基础代码kNN

机器学习实战代码注解
小白机器学习from numpy import * ##导入科学计算包
import operator ##导入## 标题运算符模块
import math

##创建数据集和标签
def createDataSet():
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) #numpy函数创建数组
labels = [‘A’,‘A’,‘B’,‘B’]
return group, labels

def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0]
##返回dataSet的array的行数 -> 使得标签向量元素个数与之相等4
diffMat = tile(inX,(dataSetSize,1))-dataSet ##tile 这个函数还不是很理解
sqdiffMat = diffMat ** 2
sqDistances = sqdiffMat.sum(axis=1) # 矩阵中对行数求和
distances = sqDistances ** 0.5
sortedDistIndicies = distances.argsort() #argsort函数返回的是数组值从小到大的索引值
classCount = {} #{voteIlabel是key value是key次数
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]] #依次找对应最小距离的labels赋值给voteIlabel
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0] #将字典拆解为元组

##datingTestSet
def file2matrix(filename):
fr = open(filename)
array0Lines = fr.readlines()
numberOfLines = len(array0Lines)
returnMat = zeros((numberOfLines,3)) #创建返回的NumPy矩阵
classLabelVector = []
index = 0
for line in array0Lines:
line = line.strip()
listFromLine = line.split(’\t’)
returnMat[index, :] = listFromLine[0:3]
classLabelVector.append(round(float(listFromLine[-1])))
index += 1
return returnMat, classLabelVector

##归一化特征值
def autoNorm(dataSet):
minVals = dataSet.min(0) #参数0使得函数可以从列中选取最小值,而不是选取当前行的最小值
maxVals = dataSet.max(0)
ranges = maxVals - minVals
normDataSet = zeros(shape(dataSet))
m = dataSet.shape[0] #输出dataSet行数
normDataSet = dataSet - tile(minVals,(m,1))
normDataSet = normDataSet/tile(ranges,(m,1)) #具体特征值
return normDataSet, ranges, minVals
#特征值矩阵有10003个值,而minVals和range值都为13,
#使用Numpy中tile()函数将变量内容复制成输入矩阵相同大小的矩阵

2019-3-10 《机器学习实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值