KNN cosine 余弦相似度计算
# 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 余弦相似度计算的更多相关文章
- 两矩阵各向量余弦相似度计算操作向量化.md
余弦相似度计算: \cos(\bf{v_1}, \bf{v_2}) = \frac{\left( v_1 \times v_2 \right)}{||v_1|| * ||v_2|| } \cos(\b ...
- java算法(1)---余弦相似度计算字符串相似率
余弦相似度计算字符串相似率 功能需求:最近在做通过爬虫技术去爬取各大相关网站的新闻,储存到公司数据中.这里面就有一个技术点,就是如何保证你已爬取的新闻,再有相似的新闻 或者一样的新闻,那就不存储到数据 ...
- Python简单实现基于VSM的余弦相似度计算
在知识图谱构建阶段的实体对齐和属性值决策.判断一篇文章是否是你喜欢的文章.比较两篇文章的相似性等实例中,都涉及到了向量空间模型(Vector Space Model,简称VSM)和余弦相似度计算相关知 ...
- Spark Mllib里相似度度量(基于余弦相似度计算不同用户之间相似性)(图文详解)
不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 协调过滤算法,是一种基于群体用户或者物品的典型推荐算法,也是目前常用的推荐 ...
- <tf-idf + 余弦相似度> 计算文章的相似度
背景知识: (1)tf-idf 按照词TF-IDF值来衡量该词在该文档中的重要性的指导思想:如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词. ...
- 余弦相似度-Cosine Similar(转载)
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小.相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上. 与欧几里德距离类似,基于余弦相似度的计算方法也是把用 ...
- word2vec词向量训练及中文文本类似度计算
本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...
- 3. 文本相似度计算-DSSM算法
1. 文本相似度计算-文本向量化 2. 文本相似度计算-距离的度量 3. 文本相似度计算-DSSM算法 4. 文本相似度计算-CNN-DSSM算法 1. 前言 最近在学习文本相似度的计算,前面两篇文章 ...
- 余弦相似度及基于python的三种代码实现、与欧氏距离的区别
1.余弦相似度可用来计算两个向量的相似程度 对于如何计算两个向量的相似程度问题,可以把这它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向.两条线段之间形成一个夹角, ...
随机推荐
- 人工智能-baidu-aip语音合成(文字转语音)
from aip import AipSpeech APP_ID = ' APP_KEY = 'DhXGtWHYMujMVZZGRI3a7rzb' SECRET_KEY = 'PbyUvTL31fIm ...
- mysql执行计划图
- google guava libraries
google/guava Guava项目包含一些在我们自己的项目中可以依赖的Google核心库.也就是Google开源的核心库,可以由其他项目利用. 其中包括: 集合 缓存 原语的支持(primiti ...
- c# 单例模式(Single);单例模式的5种写法
单例模式(Singleton Pattern): 在平时的开发中,可能会用到单例模式,许多java的笔试题中也会叫笔试者写出单例模式的那几种写法并且分析.那么下面就来轻轻地探讨一下,最简单的设计模式, ...
- Archimate
archimate语言提供了一种用于表示企业体系结构的图形化语言,包括策略,转换和迁移规划,以及架构的动机和基本原理.该标准的设计尽可能紧凑,但仍可用于大多数企业体系结构建模需求.下图显示了Archi ...
- 转:ADO,OLEDB,ODBC,DAO的区别
ODBC(Open Database Connectivity,开放数据库互连) 1992年,微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有 ...
- gstreamer——文档/资源/使用
http://gstreamer.freedesktop.org/src/ http://gstreamer.freedesktop.org/data/doc/gstreamer/head/qt-gs ...
- 阿拉伯数字转中文大写数字的JS
function intToChinese ( str ) { str = str+''; var len = str.length-1; var idxs = ['','十','百','千','万' ...
- samtools+bcftools 进行SNP calling
两个软件的作用:1.samtools mpileup 主要是用于收集BAM文件中的信息,这个位点上有多少条read匹配,匹配read的碱基是什么,并将这些信息存储在BCF文件中.2.bcftools ...
- 递归实现N皇后问题
其实是看到一位名为“活在二次元的伪触”的博主昨天还是前天写了篇这个题材的笔记,觉得有点意思,于是想自己来写写. 其实我发现上述那位同学写N皇后问题写得还不错,文末也会给出这位同学用通过递归的方法实现N ...