机器学习之KNN

以下博客主要由两部分构成。一是理论讲解,而是代码实现(因为工程上使用KNN的频率不是很高,所以代码不是目的,一些代码中的技巧就显得很重要了)。

理论分析

首先KNN是什么?K-Nearest Neighbors (KNN)
以下的图片均来自‘贪心科技’,不是打广告,纯粹是尊重知识产权。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述问题一:为什么一般大家会选择奇数的K
因为便于投票分类
在这里插入图片描述决策边界决定了“线性分类器”或者“非线性分类器”
怎么选择合适的K,一般会用交叉验证法来选择合适的K。同时哟啊注意,不要用测试数据来调参。

特征缩放----线性归一化(Min-max Normalization)
X n e w = ( X − m i n ( X ) ) ÷ ( m a x ( X ) − m i n ( X ) ) X_{new} = (X-min(X))\div(max(X)-min(X)) Xnew=(Xmin(X))÷(max(X)min(X))

标准差标准化 (Z-score Normalization)
就是平均值、方差啥的
X n e w = ( X − m e a n ( X ) ) ÷ ( s t d ( X ) ) X_{new}=(X-mean(X))\div(std(X)) Xnew=(Xmean(X))÷(std(X))
KNN之所以不能广泛的工程应用的是因为KNN处理大数据量的任务困难,主要困难在耗时、K值选择影响太大。

代码

主要代码可以看我的github(来都来了,打颗星啊)
KNN

sklearn划分数据

sklearn划分数据
from sklearn.model_selection import train_test_split
#把数据分为训练数据和测试数据
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=2003)
'''
参数代表含义:
train_data:所要划分的样本特征集
train_target:所要划分的样本结果
test_size:样本占比,如果是整数的话就是样本的数量
random_state:是随机数的种子。
'''

统计非0数目

np.count_nonzero()

反函数 np.argsort

import numpy as np
x=np.array([1,4,3,-1,6,9])
y = x.argsort()
#y=array([3,0,2,1,4,5])
#我们发现argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引),然后输出到y。例如:x[3]=-1最小,所以y[0]=3,x[5]=9最大,所以y[5]=5。

计数 count.most_common

from collections import Counter
#统计字符串
# top n问题
user_counter = Counter("abbafafpskaag")
print(user_counter.most_common(3)) #[('a', 5), ('b', 2), ('f', 2)]
print(user_counter['a']) # 5
#总结:most_common()函数用来实现Top n 功能.

生成随机样本、数据拼接

# 生成一些随机样本
n_points = 100
#依据指定的均值和协方差生成数据
X1 = np.random.multivariate_normal([1,50], [[1,0],[0,10]], n_points)
X2 = np.random.multivariate_normal([2,50], [[1,0],[0,10]], n_points)
#数据拼接
X = np.concatenate([X1,X2])

product

import itertools
a = (1, 2, 3)
b = ('A', 'B', 'C')
c = itertools.product(a,b)
for elem in c:
    print(elem)
(1, 'A')
(1, 'B')
(1, 'C')
(2, 'A')
(2, 'B')
(2, 'C')
(3, 'A')
(3, 'B')
(3, 'C')

还有一些生成热图的其他代码请看github

内容来自互联网,如有侵权通知后删除 sqluldr2是一款Oracle数据快速导出工具,包含32、64位程序,sqluldr2在大数据量导出方面速度超快,能导出亿级数据为excel文件,另外它的导入速度也是非常快速,功能是将数据以TXT/CSV等格式导出,有需要的赶快下载吧! oracle数据导出工具sqluldr2 基本简介   下载完sqluldr解压后,文件夹内容如下:   sqluldr2.exe 用于32位windows平台;   sqluldr2_linux32_10204.bin 适用于linux32位操作系统;   sqluldr2_linux64_10204.bin 适用于linux64位操作系统;   sqluldr264.exe 用于64位windows平台。 使用方法   1、首先将sqluldr2.exe复制到执行目录下,即可开始使用   2、查看help 帮助 sqluldr2 官方下载   3、执行数据导出命令   3.1、常规导出   sqluldr2 test/test@127.0.1.1/orcl query="select * from temp_001" head=yes file=d:\tmp001.csv   说明:head=yes 表示输出表头 oracle数据导出工具sqluldr2   3.2、使用sql参数   sqluldr2 test/test@127.0.1.1/orcl sql=test_sql.sql head=yes file=d:\tmp001.csv   test_sql的内容为:   select * from temp_001 sqluldr2 官方下载   3.3、使用log参数   当集成sqluldr2在脚本中时,就希望屏蔽上不输出这些信息,但又希望这些信息能保留,这时可以用“LOG”选项来指定日志文件名。   sqluldr2 test/test@127.0.1.1/orcl sql=test_sql.sql head=yes file=d:\tmp001.csv log=+d:\tmp001.log oracle数据导出工具sqluldr2   3.4、使用 table 参数   当使用 table 参数时,在目录下会生成对应的ctl控制文件,如下语句会生成temp_001_sqlldr.ctl文件。   sqluldr2 test/test@127.0.1.1/orcl query="select * from temp_001" table=temp_001 head=yes file=d:\tmp001.csv sqluldr2 官方下载   生成的控制文件temp_001_sqlldr.ctl的内容如下: oracle数据导出工具sqluldr2   4、主要参数说明   Field 分隔符 指定字段分隔符,默认为逗号   record 分隔符 指定记录分隔符,默认为回车换行,Windows下的换行   quote 引号符 指定非数字字段前后的引号符   例如现在要改变默认的字段分隔符,用“#”来分隔记录,导出的命令如下所示:   sqluldr2 test/test sql=tmp.sql field=#   在指定分隔符时,可以用字符的ASCII代码(0xXX,大写的XX为16进制的ASCII码值)来指定一个字符,常用的字符的ASCII代码如下:   回车=0x0d,换行=0x0a,TAB键=0x09,|=0x7c,&=0x26,双引号=0x22,单引号=0x27   在选择分隔符时,一定不能选择会在字段值中出现的字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值