首页 > 其他分享 >机器学习实战:knn海伦约会

机器学习实战:knn海伦约会

时间:2022-10-27 13:00:43浏览次数:47  
标签:knn 海伦 return splittest classCount 约会 param np total


机器学习实战:knn海伦约会_数据


机器学习实战:knn海伦约会_归一化_02

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import copy

def autoNorm(x):
"""
最大值最小值归一化
:param x: 需要归一化的特征向量
:return: 新的数组、极差、最小值
"""
assert isinstance(x,np.ndarray)

minVals=x.min(axis=0)
maxVals=x.max(axis=0)
ranges=maxVals-minVals

x_new=(x-minVals)/ranges # 广播

return x_new,ranges,minVals

def getdata_normal():
"""
读取原始文本数据
:return:
"""
fp="datingTestSet.txt"

f=open(fp,mode='r')

data=[line.strip().split('\t') for line in f.readlines()]
data=np.array(data)

x=data[:,:-1].astype(np.float)
y=data[:,-1]

f.close()

# 可视化特征
# labels=copy.deepcopy(y)
# dic={"largeDoses": "r", "smallDoses": 'g', "didntLike": 'b'}
# for k, v in dic.items():
# labels[labels==k]=v
# plt.scatter(x[:, 0], x[:, 1], 10,labels)
# plt.title(dic)
# plt.show()

return x,y

def knnClaffify(testItem,trainX,trainY,k):
"""
knn分类算法,单条数据测试
:param testItem: 测试的单条数据
:param trainX: 训练集特征
:param trainY: 训练集标签
:param k: 邻居个数
:return: 分类类别
"""
distances=np.sqrt(np.sum((trainX-testItem)**2,axis=1))

ind=np.argsort(distances)

classCount={}
for i in range(k):
vote=trainY[ind[i]]
classCount[vote]=classCount.get(vote,0)+1
classCount=sorted(classCount.items(),key=lambda x:x[0])

return classCount[0][0]

def knnTest():
"""
测试算法
:return:
"""
x, y = getdata_normal()
x, _, _ = autoNorm(x)

total=len(x)
splittest=int(0.9*total) # 分割训练集和测试集,训练集占比0.8
print("分割位置:{},总数:{}".format(splittest,total))

trueCount=0
for i in range(splittest,total):
result = knnClaffify(x[i], x[:splittest],y[:splittest],k=3)
trueCount+=(y[i]==result)

print("正确率:{2}({0}/{1})".format(trueCount,total-splittest,trueCount/(total-splittest)))

def knnForPerson():

x, y = getdata_normal()
x,ranges,minVals = autoNorm(x)

t1 = float(input("每年旅行距离:"))
t2 = float(input("玩游戏时间占比:"))
t3 = float(input("每周吃的冰激凌:"))

item=(np.array([t1,t2,t3])-minVals)/ranges
result=knnClaffify(item,x,y,k=3)
print("predict: ",result)

if __name__ == '__main__':

knnTest()
knnForPerson()


标签:knn,海伦,return,splittest,classCount,约会,param,np,total
From: https://blog.51cto.com/u_15847885/5800838

相关文章

  • python sklearn中的KNN
    代码fromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.neighborsimportKNeighborsClassifierimportnumpyasnpiris=dat......
  • 第4章 最基础的分类算法-k近邻算法 kNN
    4-1k近邻算法基础 ......
  • cv学习总结(10.16-10.23) KNN
    本周从周一开始学习cs231n的相关内容,看完了231n的课程介绍,背景介绍,图像分类的KNN和SVM算法,完成了作业中assignment1的KNN部分的代码(附件),思考总结了KNN的实现原理:即将原......
  • 使用KNN进行分类和回归
    一般情况下k-NearestNeighbor(KNN)都是用来解决分类的问题,其实KNN是一种可以应用于数据分类和预测的简单算法,本文中我们将它与简单的线性回归进行比较。KNN模型是一个简......
  • K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享|附代码数据
    全文下载链接:http://tecdat.cn/?p=24057本文的目标是使用K-最近邻(K近邻),ARIMA和神经网络模型分析Google股票数据集(查看文末了解数据获取方式)预测Google的未来股价,然后分析......
  • 1014 福尔摩斯的约会(JAVA)
    大侦探福尔摩斯接到一张奇怪的字条:我们约会吧!3485djDkxh4hhGE2984akDfkkkkggEdsbs&hgsfdkd&Hyscvnm大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间​​星期四......
  • 【算法】KNN、SVM算法详解!
    什么是KNN算法寻找未知分类数据的离它最近的n个已知数据,通过已知数据的分类来推断这个未知数据的分类KNN的原理步骤计算距离(常用欧几里得距离或马氏距离)升序排列(最近......
  • Python实战—基于KNN算法尾鸢花数据集分类
    KNN模型理论K最近邻分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中......
  • 1014 福尔摩斯的约会
     题目: 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧!3485djDkxh4hhGE2984akDfkkkkggEdsbs&hgsfdkd&Hyscvnm 大侦探很快就明白了,字条上奇怪的乱码实际上就......
  • knn 算法以及电影种类预测&莺尾花种类预测
    1.简介 K-NearestNeighbor算法又叫KNN算法(最近邻算法,k是选取几个距离其最近的样本作为参考),这个算法是机器学习里面一个比较经典的分类和回归算法。 定义:如果一个样本在......