# -*- coding:utf-8 -*-
# import numpy as np #import numpy 和from numpy import *是不一样的
#
# # import numpy,如果你使用numpy的属性都需要在前面加上numpy
# #
# # from numpy import * ,则不需要加入numpy
# #
# # 后者不建议使用,如果你下次引用和numpy里的函数一样的情况,就会出现命名冲突
# # 举个例子:将列表[1,2,3,4,5,6,7]生成numpy的数组[1 2 3 4 5 6 7]
# #
# # import numpy
# #
# # arr = numpy.array([1,2,3,4,5,6,7])
# #
# # print(arr)
# #
# # from numpy import *
# #
# # arr = array([1,2,3,4,5,6,7])
# #
# # print(arr)
#
# x=np.array([[0,0],[1,1],[2,2]]) #二维数组,从集合的角度看,数组是单聚体,必须用[]套起来
# inX = np.array([0,0])
# #print x[1][1] #二维数组的引用,输出结果是1
#
# wide = x.shape[0]
# #print wide #输出结果是3,注意shape不是np里的东西,shape表示集合里有多少个元素
# diffMat = np.tile(inX,(wide,1))-x #使用import有个好处是可以查看,直接用np.,这里的函数就出来了
# #print diffMat #输出[[0 0][-1 -1][-2 -2]]
# # #tile是创造0数组的,(wide,1)是取最小的那个进行复制,1表示原数
# b=diffMat.sum(axis=1) #把二元数组里的数值相加,并生成一维数组
# #print b #输出 [0 -2 -4]
# bb=np.array([1,23,4,32,23,-4,23]) #一维数组标配([])
# c=bb.argsort() #输出[2 1 0],输出的是从小到大的数据的位置
# #print c
# labels = ['A','B','C','D','E','F','G']
# for i in range(7):
# d=labels[c[i]] #把顺序复制到labels标签里
# #print d #输出F A C B E G D,使用pycharm不会自动打印结果,需要使用print
#
# import os
# #def file2matrix(filename):
#最好把自己要打开的文件放在当前pycha环境路径下
a = open('datingTestSet.txt') #python里面的前置空格很重要,要注意,不然容易出bug,特别是前面是for,下面向跳出的时候
arrayOLines = a.readlines() #这个readlines是获得了每行的数据,一般可以通过for/print打印出来
# print arrayOLines
numberOfLines = len(arrayOLines) #获得文本有多少行
# print numberOfLines
import numpy as np
returnMat = np.zeros((numberOfLines,3)) #zeros的函数是(行,列)
# print returnMat
classLabelVector=[]
for line in arrayOLines:
line = line.strip() # strip是清理门户用的
# 声明:s为字符串,rm为要删除的字符序列
# s.strip(rm)
# 删除s字符串中开头、结尾处,位于
# rm删除序列的字符
# s.lstrip(rm)
# 删除s字符串中开头处,位于
# rm删除序列的字符
# s.rstrip(rm)
# 删除s字符串中结尾处,位于
# rm删除序列的字符
# 注意:
# 1.
# 当rm为空时,默认删除空白符(包括
# '\n', '\r', '\t', ' ')
# print line
listFromLine = line.split('\t')
#split是个好函数,split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
# print listFromLine
returnMat[0,:] = listFromLine[0:3]
# print returnMat
# classLabelVector.append(int(listFromLine[-1])) #使用append之前要定义一个空的矩阵
# list.append(object)
# 向列表中添加一个对象object
# list.extend(sequence)
# 把一个序列seq的内容添加到列表中
# music_media = ['compact disc', '8-track tape', 'long playing record']
# new_media = ['DVD Audio disc', 'Super Audio CD']
# music_media.append(new_media)
# print music_media
# >> > ['compact disc', '8-track tape', 'long playing record', ['DVD Audio disc', 'Super Audio CD']]
# 使用append的时候,是将new_media看作一个对象,整体打包添加到music_media对象中。 from numpy import *
def autoNorm(dataSet):
minVals = dataSet.min(0)
maxVals = dataSet.max(0)
ranges = maxVals - minVals
normDataSet = zeros(shape(dataSet)) #创建新的返回矩阵
m = dataSet.shape[0] #得到数据集的行数 shape方法用来得到矩阵或数组的维数
normDataSet = dataSet - tile(minVals,(m,1)) #tile:numpy中的函数。tile将原来的一个数组minVals,扩充成了m行1列的数组
normDataSet = normDataSet/tile(ranges,(m,1))
return normDataSet,ranges,minVals #
# def autoNorm(dataSet):
# # 将每列的最小值放在minVals中
# minVals = dataSet.min(0)
# # 将每列的最大值放在maxVals中
# maxVals = dataSet.max(0)
# # 计算可能的取值范围
# ranges = maxVals - minVals
# # 创建新的返回矩阵
# normDataSet = zeros(shape(dataSet))
# # 得到数据集的行数 shape方法用来得到矩阵或数组的维数
# m = dataSet.shape[0]
# # tile:numpy中的函数。tile将原来的一个数组minVals,扩充成了m行1列的数组
# # 矩阵中所有的值减去最小值
# normDataSet = dataSet - tile(minVals, (m, 1))
# # 矩阵中所有的值除以最大取值范围进行归一化
# normDataSet = normDataSet / tile(ranges, (m, 1))
# # 返回归一矩阵 取值范围 和最小值
# return normDataSet, ranges, minVals def datingClassTest():
hoRatio = 0.10

【python】kNN基础算法--推荐系统(辅助研究)的更多相关文章

  1. 【python】kNN基础算法--推荐系统

    虽然把text转成全部量化是可以的,但是还是需要把text转成numpy的形式(这个是必须掌握的) 在将数据输入到分类器之前,必须将待处理数据的格式改变为分类器可以接受的格式. 数据规范化.数据归一化 ...

  2. 【python】kNN基础算法--分类和推荐系统

    (1)k-近邻算法是分类数据最简单最有效的方法. (2)在将数据输入到分类器之前,必须将待处理数据的格式改变为分类器可以接受的格式. (3)所有的推荐模型都可以使用这个算法,只要将结果量化就行了,主要 ...

  3. Python之基础算法介绍

    一.算法介绍 1. 算法是什么 算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输 ...

  4. python函数基础算法简介

    一.多层语法糖本质 """ 语法糖会将紧挨着的被装饰对象名字当参数自动传入装饰器函数中""" def outter(func_name): ...

  5. Python机器学习基础教程-第1章-鸢尾花的例子KNN

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  6. KNN分类算法及python代码实现

    KNN分类算法(先验数据中就有类别之分,未知的数据会被归类为之前类别中的某一类!) 1.KNN介绍 K最近邻(k-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法. 机器学习, ...

  7. Python 从基础------进阶------算法 系列

    1.简介                                                                                               关 ...

  8. python每日经典算法题5(基础题)+1(中难题)

    现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级 ...

  9. python每日经典算法题5(基础题)+1(较难题)

    一:基础算法题5道 1.阿姆斯特朗数 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数.判断用户输入的数字是否为阿姆斯特朗数. (1)题目分析:这里要先得到该数是多少位的,然后再把 ...

随机推荐

  1. Java编程中标识符注意点以及注释

    标识符注意点 所有的标识符都应该以字母(A-Z或者a-z),美元符($),或者下划线(_)开始 首字符之后可以是字母(A-Z或者a-z),美元符($),下划线(_)或数 字的任何字符组合 不能使用关键 ...

  2. Redis 源码简洁剖析 07 - main 函数启动

    前言 问题 阶段 1:基本初始化 阶段 2:检查哨兵模式,执行 RDB 或 AOF 检测 阶段 3:运行参数解析 阶段 4:初始化 server 资源管理 初始化数据库 创建事件驱动框架 阶段 5:执 ...

  3. AT2274 [ARC066D] Contest with Drinks Hard

    先考虑不修改怎么做,可以令 \(dp_i\) 表示前 \(i\) 个题能获得的最大得分.那么我们有转移: \[dp_i = \min\{dp_{i - 1}, dp_{j} + \frac{(i - ...

  4. 异步回调实现- Guava Retryer

    为什么要使用重试利器Retryer 在实际开发中我们经常会遇到需要轮询查询一个接果,实现轮询的方式有很多种,我们经常要写许多代码,有时还会怕写出的代码有bug,如果已经有轮子了,我们就没必要重复造轮子 ...

  5. iOS中JavaScript和OC交互 --by 胡 xu

    在iOS开发中很多时候我们会和UIWebView打交道,目前国内的很多应用都采用了UIWebView的混合编程技术,最常见的是微信公众号的内容页面.前段时间在做微信公众平台相关的开发,发现很多应用场景 ...

  6. Springboot+Redisson自定义注解一次解决重复提交问题(含源码)

    前言   项目中经常会出现重复提交的问题,而接口幂等性也一直以来是做任何项目都要关注的疑难点,网上可以查到非常多的方案,我归纳了几点如下:   1).数据库层面,对责任字段设置唯一索引,这是最直接有效 ...

  7. Linux组管理

    首先查看文件所有者.文件所在组等信息:ls -l 1.改变文件所有者:chown 用户名 文件名 执行 chown xm Hello.java 后,可以看到文件所有者现在是属于xm这个用户的了 2.改 ...

  8. Solution -「AGC 019F」「AT 2705」Yes or No

    \(\mathcal{Description}\)   Link.   有 \(n+m\) 个问题,其中 \(n\) 个答案为 yes,\(m\) 个答案为 no.每次你需要回答一个问题,然后得知这个 ...

  9. mysql数据库 Window下安装

    关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据 库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数 据项的特殊收集体,这 ...

  10. verification TLM传输数据导致多线程访问同一个数据

    TLM传输数据导致多线程访问同一个数据 原因 TLM发送数据跟mailbox类似,都是发送的引用,这样发送端和接收端的引用都指向同一个数据,这样就会出现发送端修改数据会影响到接收端,比如发送的时候数据 ...