# 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. python获取当前目录路径和上级路径

    在使用python的时候总会遇到路径切换的使用情况,如想从文件夹test下的test.py调用data文件夹下的data.txt文件: . └── folder ├── data │ └── data ...

  2. 玩转git版本控制软件

    一.git的基本介绍 1.什么是git? git是个开源的分布式版本控制软件,用以有效.高速的处理从很小到非常大的项目版本管理.说白了就是个版本控制软件 2.git的使用方法 git软件是通过命令来实 ...

  3. JAVA抠取Excel中的图片

    EXCEL中扔了一堆的图片,老大让对应到数据库中的数据上.思路先把图片抠出存成单个图片.然后上传到服务器,取下路径更新到数据库中. 注释掉的部分为有多个Excel时使用. package com.** ...

  4. python读写Excel文件--使用xlrd模块读取,xlwt模块写入

    一.安装xlrd模块和xlwt模块 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd-0.9. ...

  5. Android Http Get Post

    public class MyHttpUrlCon { public static String settionId = ""; ;// public ReturnData doG ...

  6. 请求json和xml数据时的方式

    当请求xml数据时,直接通过NSMutableData接收后解析, NSURL *url = [NSURL URLWithString:PATH]; _receiveData = [[NSMutabl ...

  7. HTML系列(1)简介

        开始整理html的知识.     (1)HTML HTML 是用来描述网页的一种语言. 1.HTML指的是超文本标记语言: HyperText Markup Language 2.HTML不是 ...

  8. HDU 4783 Clumsy Algorithm

    题意不提. 我们可以发现,可以将最终序列分为对于第i个位置i-pi>=0与i-pi<0种两个子序列.且如果f[n]==g[n],则有两个子序列都递增. 原因是f[n]表示1-n这个排列的逆 ...

  9. golang注册码

    许可证服务认证 由于更新,最近注册码都不能用了,下面是能用的, http://idea.youbbs.org

  10. iOS应用网络安全之HTTPS

    移动互联网开发中iOS应用的网络安全问题往往被大部分开发者忽略,iOS9和OS X 10.11开始Apple也默认提高了安全配置和要求.本文以iOS平台App开发中对后台数据接口的安全通信进行解析和加 ...