# coding: utf-8
import collections
import numpy as np
import os
from sklearn.neighbors import NearestNeighbors def cos(vector1,vector2):
dot_product = 0.0;
normA = 0.0;
normB = 0.0;
for a,b in zip(vector1,vector2):
dot_product += a*b
normA += a**2
normB += b**2
if normA == 0.0 or normB==0.0:
return None
else:
return dot_product / ((normA*normB)**0.5) def iterbrowse(path):
for home, dirs, files in os.walk(path):
for filename in files:
yield os.path.join(home, filename) def get_data(filename):
white_verify = []
with open(filename) as f:
lines = f.readlines()
for line in lines:
a = line.split("\t")
if len(a) != 78:
print(line)
raise Exception("fuck")
white_verify.append([float(n) for n in a[3:]])
return white_verify unwanted_features = {6, 7, 8, 41,42,43,67,68,69,70,71,72,73,74,75} def get_wanted_data(x):
return x
"""
ans = []
for item in x:
#row = [data for i, data in enumerate(item) if i+6 in wanted_feature]
row = [data for i, data in enumerate(item) if i+6 not in unwanted_features]
ans.append(row)
#assert len(row) == len(wanted_feature)
assert len(row) == len(x[0])-len(unwanted_features)
return ans
""" if __name__ == "__main__":
neg_file = "cc_data/black/black_all.txt"
pos_file = "cc_data/white/white_all.txt"
X = []
y = []
# if os.path.isfile(pos_file):
# if pos_file.endswith('.txt'):
# pos_set = np.genfromtxt(pos_file)
# elif pos_file.endswith('.npy'):
# pos_set = np.load(pos_file)
# X.extend(pos_set)
# y += [0] * len(pos_set)
# print("len of X(white):", len(X))
if os.path.isfile(neg_file):
if neg_file.endswith('.txt'):
neg_set = np.genfromtxt(neg_file)
elif neg_file.endswith('.npy'):
neg_set = np.load(neg_file)
X.extend(list(neg_set) * 1)
y += [1] * (1 * len(neg_set))
print("len of X:", len(X))
# print("X sample:", X[:3])
# print("len of y:", len(y))
# print("y sample:", y[:3])
X = [x[3:] for x in X]
X = get_wanted_data(X)
# print("filtered X sample:", X[:3]) black_verify = []
for f in iterbrowse("todo/top"):
print(f)
black_verify += get_data(f)
# print(black_verify)
black_verify = get_wanted_data(black_verify)
black_verify_labels = [1] * len(black_verify) white_verify = get_data("todo/white_verify.txt")
# print(white_verify)
white_verify = get_wanted_data(white_verify)
white_verify_labels = [0] * len(white_verify) unknown_verify = get_data("todo/pek_feature74.txt")
unknown_verify = get_wanted_data(unknown_verify) bd_verify = get_data("guzhaoshen_pek_out.txt")
# print(unknown_verify) # samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
#neigh = NearestNeighbors(n_neighbors=3)
neigh = NearestNeighbors(n_neighbors=1, metric='cosine')
neigh.fit(X) print("neigh.kneighbors(black_verify)")
nearest_points = (neigh.kneighbors(black_verify))
print(nearest_points)
for i, x in enumerate(black_verify):
print(i, nearest_points[1][i], "cosine:", cos(x, nearest_points[1][i])) #print(neigh.predict(black_verify))
print("neigh.kneighbors(white_verify)")
nearest_points = (neigh.kneighbors(white_verify))
print(nearest_points)
for i, x in enumerate(white_verify):
print(i, nearest_points[1][i], "cosine:", cos(x, nearest_points[1][i])) #print(neigh.predict(white_verify))
print("neigh.kneighbors(unknown_verify)")
nearest_points = (neigh.kneighbors(unknown_verify))
print(nearest_points)
for i, x in enumerate(unknown_verify):
print(i, nearest_points[1][i], "cosine:", cos(x, nearest_points[1][i])) #print(neigh.predict(unknown_verify))
print("neigh.kneighbors(self)")
print(neigh.kneighbors(X[:3])) #print(neigh.predict(X[:3]))
print("neigh.kneighbors(bd pek)")
print(neigh.kneighbors(bd_verify)) nearest_points = (neigh.kneighbors(bd_verify))
print(nearest_points)
for i, x in enumerate(bd_verify):
print(i, nearest_points[1][i], "cosine:", cos(x, nearest_points[1][i]))

输出示例:

neigh.kneighbors(white_verify)
(array([[ 0.01140831],
       [ 0.0067373 ],
       [ 0.00198682],
       [ 0.00686728],
       [ 0.00210445],
       [ 0.00061413],
       [ 0.00453888]]), array([[11032],
       [  967],
       [11091],
       [13149],
       [11091],
       [19041],
       [13068]]))
(0, array([11032]), 'cosine:', 1.0)
(1, array([967]), 'cosine:', 1.0)
(2, array([11091]), 'cosine:', 1.0)
(3, array([13149]), 'cosine:', 1.0)
(4, array([11091]), 'cosine:', 1.0)
(5, array([19041]), 'cosine:', 1.0)
(6, array([13068]), 'cosine:', 1.0)

样本质量堪忧啊!!!

注意:如果是常规knn,计算距离时候记得标准化。如果各个维度的数据属性衡量单位不一样:

    from sklearn import preprocessing
scaler = preprocessing.StandardScaler().fit(X)
X = scaler.transform(X)
print("standard X sample:", X[:3]) black_verify = scaler.transform(black_verify)
print(black_verify) white_verify = scaler.transform(white_verify)
print(white_verify) unknown_verify = scaler.transform(unknown_verify)
print(unknown_verify)

KNN cosine 余弦相似度计算的更多相关文章

  1. 两矩阵各向量余弦相似度计算操作向量化.md

    余弦相似度计算: \cos(\bf{v_1}, \bf{v_2}) = \frac{\left( v_1 \times v_2 \right)}{||v_1|| * ||v_2|| } \cos(\b ...

  2. java算法(1)---余弦相似度计算字符串相似率

    余弦相似度计算字符串相似率 功能需求:最近在做通过爬虫技术去爬取各大相关网站的新闻,储存到公司数据中.这里面就有一个技术点,就是如何保证你已爬取的新闻,再有相似的新闻 或者一样的新闻,那就不存储到数据 ...

  3. Python简单实现基于VSM的余弦相似度计算

    在知识图谱构建阶段的实体对齐和属性值决策.判断一篇文章是否是你喜欢的文章.比较两篇文章的相似性等实例中,都涉及到了向量空间模型(Vector Space Model,简称VSM)和余弦相似度计算相关知 ...

  4. Spark Mllib里相似度度量(基于余弦相似度计算不同用户之间相似性)(图文详解)

    不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 协调过滤算法,是一种基于群体用户或者物品的典型推荐算法,也是目前常用的推荐 ...

  5. <tf-idf + 余弦相似度> 计算文章的相似度

    背景知识: (1)tf-idf 按照词TF-IDF值来衡量该词在该文档中的重要性的指导思想:如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词. ...

  6. 余弦相似度-Cosine Similar(转载)

    余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小.相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上. 与欧几里德距离类似,基于余弦相似度的计算方法也是把用 ...

  7. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

  8. 3. 文本相似度计算-DSSM算法

    1. 文本相似度计算-文本向量化 2. 文本相似度计算-距离的度量 3. 文本相似度计算-DSSM算法 4. 文本相似度计算-CNN-DSSM算法 1. 前言 最近在学习文本相似度的计算,前面两篇文章 ...

  9. 余弦相似度及基于python的三种代码实现、与欧氏距离的区别

    1.余弦相似度可用来计算两个向量的相似程度 对于如何计算两个向量的相似程度问题,可以把这它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向.两条线段之间形成一个夹角, ...

随机推荐

  1. Android系统移植与调试之------->build.prop文件详细赏析

    小知识:什么是build.prop?   /system/build.prop 是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件.这个文件是如 ...

  2. bzoj3007 解救小云公主

    3007: 解救小云公主 Time Limit: 5 Sec  Memory Limit: 512 MB Submit: 159  Solved: 71 [id=3007" style=&q ...

  3. Js中localStorage

    优点: 1.拓展了cookie的4K限制 2.将数据直接存储到本地,相当于一个5M的前端页面数据库 不足: 1.浏览器的大小不统一 2.IE8以上的IE版本才支持 3.localStorage的值类型 ...

  4. nodejs中全栈开发框架meteor的文档

    http://wiki.jikexueyuan.com/project/discover-meteor/routing.html,   这本书的源码地址: https://github.com/Dis ...

  5. chrome浏览器自动填充失效问题

    现在浏览器带有自动填充,一般在input标签中增加autocomplete="off" 可以进行控制,off代表不填充,on代表填充,这个属性也可以放在form标签中,对所有的in ...

  6. golang模板语法简明教程(后面有福利哦)

    template是go 语言web开发中必不可少的,特此记录下来: [模板标签] 模板标签用"{{"和"}}"括起来   [注释] {{/* a comment ...

  7. Putty常用属性设置

    1. 使用 UTF-8避免显示乱码 2.调整 Lines of scrollback,能够回看更多的控制台输出log 3.调整颜色和字体使得看上去更舒服 4.解决数字键盘无法输入数字的问题 效果图:

  8. Ubuntu安装配置samba

    一. samba的安装: sudo apt-get insall sambasudo apt-get install smbfs 二. 创建共享目录: mkdir /home/chars/shares ...

  9. Django进阶项目

    本来想上午轻轻松松搞定,没想到还是出了其他的问题,好在最后都解决了 在middleware.py当中 # -*- coding:utf-8 -*- __author__ = 'feimao' impo ...

  10. Kattis - prva 【字符串】

    题意 从上到下 或者 从左到右 组成的长度 >= 2 的字符串 如果遇到 # 就断掉 输出 字典序最小的那一个 思路 只要从上到下 和从左到右 分别遍历一遍,将 长度 >= 2 的字符串 ...