机器学习算法之KNN

的函数:

词频:FreqDist(words_list), 接受list类型的参数,返回词典,key是元素,value是元素出现的次数

    fdist = FreqDist(dist).keys()
    dist_max=set(fdist[0:50])
    dist_min = set(fdist[-50:])

set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

>>>x = set('runoob')
>>> y = set('google')
>>> x, y
(set(['b', 'r', 'u', 'o', 'n']), set(['e', 'o', 'g', 'l']))   # 重复的被删除

1 走进KNN

1.k近邻算法的基本概念,原理以及应用

KNN(K-nearest neighbor)的基本思想非常的简单朴素,即对于一个待预测的样本x ,在训练集中找到距离其最近的k 个近邻 ,得票最高的类作为输出类别即可。当 k=1 时,则称为最近邻。

KNN常见的算法:
·Brute Force
·K-D Tree
·Ball Tree

应用:kNN 可以用来进行分类或者回归

2.k近邻算法中k的选取,距离的度量以及特征归一化的必要性

k过大时:

如果我们选取较大的k值,就相当于用较大邻域中的训练数据进行预测,这时与输入实例较远的(不相似)训练实例也会对预测起作用,使预测发生错误,k值的增大意味着整体模型变得简单。

我们想,如果k=N(N为训练样本的个数),那么无论输入实例是什么,都将简单地预测它属于在训练实例中最多的类。这时,模型是不是非常简单,这相当于你压根就没有训练模型呀!

k过小时:

如果我们选取较小的k值,那么就会意味着我们的整体模型会变得复杂,容易发生过拟合!

k的选择:李航博士书上讲到,我们一般选取一个较小的数值,通常采取 交叉验证法来选取最优的k值。(也就是说,选取k值很重要的关键是实验调参,类似于神经网络选取多少层这种,通过调整超参数来得到一个较好的结果

3.k近邻法的实现:kd树原理的讲解

4.kd树详细例子讲解

5.kd树的不足以及最差情况举例

6.k近邻方法的一些个人总结

2 KNN应用1

2.1 使用KNN检测异常操作

思路:

数据处理:

处理数据:

50个用户数据;每个用户15000条操作序列,每100条作为一个操作序列,所以每个用户的数据为cmd_list[150X100],其中每个用户15000条操作序列中统计FreqDist统计最频繁使用的前50个dist_max和 最不频繁使用的后50个dist_min。

KNN只能以标量作为输入。

特征:user_cmd_feature(150X3)

cmd_list中每个操作序列为cmd_block(100个命令)

f1:统计cmd_block中不重复命令的个数len(set(cmd_block))

f2: 统计(cmd_block中最频繁使用的前10个与dist_max)的交集个数(len(set()&set()))

f3:统计(cmd_block中最不频繁使用的前10个与dist_min)的交集个数(len(set()&set()))

训练:

user_cmd_feature[0:120](120X3):前120个操作序列作为训练序列,后30个操作序列作为测试序列

anaconda中创建虚拟环境

1、用conda创建Python虚拟环境(在conda prompt环境下完成)

conda create -n douge python=2.7

(注:该命令只适用于Windows环境;“environment_name”是要创建的环境名;“python=X.X”是选择的Python版本)

2、激活虚拟环境(在conda prompt环境下完成)

activate douge

Windows: activate your_env_name(虚拟环境名称)

3、给虚拟环境安装外部包

conda install -n douge vulners

例如: conda install -n tensorflow pandas

4、查看已有的环境(当前已激活的环境会显示一个星号)

conda info -e

5、删除一个已有的虚拟环境

conda remove --name your_env_name --all

6、查看pip的安装目录

pip list

7、删除已经安装的模块
pip uninstall **
(例如:pip uninstall numpy)

pycharm配置虚拟环境

1622551543337

BUG

1 cross_validation等模块弃用

新的模块sklearn.model_selection,将以前的sklearn.cross_validation, sklearn.grid_searchsklearn.learning_curve模块组合到一起

比如:cross_validation模块弃用,所有的包和方法都在model_selection中,包和方法名没有发生变化

将from sklearn import cross_validation

改为from sklearn import model_selection

文章目录
  1. 1 走进KNN
    1. 1.k近邻算法的基本概念,原理以及应用
    2. 2.k近邻算法中k的选取,距离的度量以及特征归一化的必要性
    3. 3.k近邻法的实现:kd树原理的讲解
  2. 2 KNN应用1
  • anaconda中创建虚拟环境
    1. 2、激活虚拟环境(在conda prompt环境下完成)
    2. 3、给虚拟环境安装外部包
    3. 4、查看已有的环境(当前已激活的环境会显示一个星号)
    4. 5、删除一个已有的虚拟环境
    5. 6、查看pip的安装目录
  • BUG