lpa标签传播算法解说及代码实现
package lpa; import java.util.Arrays;
import java.util.HashMap;
import java.util.Map; public class LPA { public static float sigma = 1;
public static int tag_num = 2; public static void main(String[] args) { float[][] data = {
{1,1},
{1,2},
{2,1},
{2,2},
{4,4},
{6,6},
{6,7},
{7,6},
{7,7}
}; Map<Integer, Integer> tag_map = new HashMap<Integer, Integer>();
tag_map.put(1, 1);
tag_map.put(6, 0); float[][] weight = new float[data.length][data.length]; for(int i = 0; i < weight.length; i++) {
float sum = 0f;
for(int j = 0; j < weight[i].length; j++) {
weight[i][j] = (float) Math.exp( - distance(data[i], data[j]) / Math.pow(sigma, 2));
sum += weight[i][j];
}
for(int j = 0; j < weight[i].length; j++) {
weight[i][j] /= sum;
}
} System.out.println("=============");
for(int i = 0; i < weight.length; i++) {
System.out.println(Arrays.toString(weight[i]));
}
System.out.println("============="); float[][] tag_matrix = new float[data.length][tag_num];
for(int i = 0; i < tag_matrix.length; i++) {
if(tag_map.get(i) != null) {
tag_matrix[i][tag_map.get(i)] = 1;
} else {
float sum = 0;
for(int j = 0; j < tag_matrix[i].length; j++) {
tag_matrix[i][j] = (float) Math.random();
sum += tag_matrix[i][j];
}
for(int j = 0; j < tag_matrix[i].length; j++) {
tag_matrix[i][j] /= sum;
}
}
} for(int it = 0; it < 100; it++) {
for(int i = 0; i < tag_matrix.length; i++) {
if(tag_map.get(i) != null) {
continue;
}
float all_sum = 0;
for(int j = 0; j < tag_matrix[i].length; j++) {
float sum = 0;
for(int k = 0; k < weight.length; k++) {
sum += weight[i][k] * tag_matrix[k][j];
}
tag_matrix[i][j] = sum;
all_sum += sum;
}
for(int j = 0; j < tag_matrix[i].length; j++) {
tag_matrix[i][j] /= all_sum;
}
}
System.out.println("=============");
for(int i = 0; i < tag_matrix.length; i++) {
System.out.println(Arrays.toString(tag_matrix[i]));
}
System.out.println("=============");
}
} public static float distance(float[] a, float[] b) { float dis = 0;
for(int i = 0; i < a.length; i++) {
dis = (float) Math.pow(b[i] - a[i], 2);
}
return dis;
}
}
lpa标签传播算法解说及代码实现的更多相关文章
- Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
转载请注明出处:http://www.cnblogs.com/bethansy/p/6953625.html LPA算法的思路: 首先每个节点有一个自己特有的标签,节点会选择自己邻居中出现次数最多的标 ...
- 标签传播算法(Label Propagation Algorithm, LPA)初探
0. 社区划分简介 0x1:非重叠社区划分方法 在一个网络里面,每一个样本只能是属于一个社区的,那么这样的问题就称为非重叠社区划分. 在非重叠社区划分算法里面,有很多的方法: 1. 基于模块度优化的社 ...
- 标签传播算法(Label Propagation)及Python实现
众所周知,机器学习可以大体分为三大类:监督学习.非监督学习和半监督学习.监督学习可以认为是我们有非常多的labeled标注数据来train一个模型,期待这个模型能学习到数据的分布,以期对未来没有见到的 ...
- 标签传播算法(llgc 或 lgc)
动手实践标签传播算法 复现论文:Learning with Local and Global Consistency1 lgc 算法可以参考:DecodePaper/notebook/lgc 初始化算 ...
- 深度学习之反向传播算法(BP)代码实现
反向传播算法实战 本文仅仅是反向传播算法的实现,不涉及公式推导,如果对反向传播算法公式推导不熟悉,强烈建议查看另一篇文章神经网络之反向传播算法(BP)公式推导(超详细) 我们将实现一个 4 层的全连接 ...
- (3)Deep Learning之神经网络和反向传播算法
往期回顾 在上一篇文章中,我们已经掌握了机器学习的基本套路,对模型.目标函数.优化算法这些概念有了一定程度的理解,而且已经会训练单个的感知器或者线性单元了.在这篇文章中,我们将把这些单独的单元按照一定 ...
- [2] TensorFlow 向前传播算法(forward-propagation)与反向传播算法(back-propagation)
TensorFlow Playground http://playground.tensorflow.org 帮助更好的理解,游乐场Playground可以实现可视化训练过程的工具 TensorFlo ...
- LabelRank非重叠社区发现算法介绍及代码实现(A Stabilized Label Propagation Algorithm for Community Detection in Networks)
最近在研究基于标签传播的社区分类,LabelRank算法基于标签传播和马尔科夫随机游走思路上改装的算法,引用率较高,打算将代码实现,便于加深理解. 这个算法和Label Propagation 算法不 ...
- 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)
小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码) Python 被称为是最接近 AI 的语言.最近一位名叫Anna-Lena Popkes的小姐姐在GitHub上分享了自己如何使用P ...
随机推荐
- BZOJ3172 单词 Fail树
题目大意:求一篇论文中每个单词分别在论文中出现多少次. 本题用AC自动机太慢,应该用Fail树将AC自动机中所有的Fail指针反向得到一个新树,这就是Fail树.对长度为x的字符串a和长度为y的字符串 ...
- TextView高级
前言 开门见山,这一篇博客主要讲一下在Android开发中,UI控件TextView的一些使用方式,并且通过四个例子实现一般项目中需要的效果来讲解TextView的使用.并且在之后的一段时间之内,都会 ...
- P4396 [AHOI2013]作业 分块+莫队
这个题正解是莫队+树状数组,但是我个人非常不喜欢树状数组这种东西,所以决定用分块来水这个题.直接在莫队维护信息的时候,维护单点同时维护块内信息就行了. 莫队就是这几行核心代码: void add(in ...
- mysql 登录与权限
一.mysql 登录方式 1.1 格式:mysql -u用户名 -p密码 -h ip -P 端口 -S 套接字 mysql -uvagrant -pvagrant -h 127.0.0.1 -P 33 ...
- 跨域解决方案之JSONP,通过借助调用百度搜索的API了解跨域案例
跨域解决方案之JSONP 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web ...
- SSRS 报表 如何加参数
SSRS 报表 如何加参数 连接上以后出现一个问题 就是给报表加上参数以后报表不断刷新,跟上次那个报表刷新是同样的问题.那么下面我们来解决一下. 1. 这是给报表添加默认参数进入页面后就不断的刷新刷新 ...
- Several Ideas on Perl List Context
According to Beginning Perl Book published by Tsinghua Pub., the list context appears when you are t ...
- 从发请求到AJAX到同源政策
1 发请求的各种方法 使用form标签(会在当前页面刷新或者新开一个页面刷新) <form action="" method=post/get> <input ...
- docker应用栈实践-nginx处理静态文件
在我的djangoweb应用在docker搭建好之后,发现一些css静态文件返回没有content-type属性,导致浏览器log一堆警告,强迫症的我受不了这一情况 目前的应用栈结构图: 一共四个容器 ...
- 8) 十分钟学会android--Activity的生命周期之停止与重启
恰当的停止与重启我们的activity是很重要的,在activity生命周期中,他们能确保用户感知到程序的存在并不会丢失他们的进度.在下面一些关键的场景中会涉及到停止与重启: 用户打开最近使用app的 ...