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;
	}
}
时间: 2024-08-06 20:29:49

lpa标签传播算法解说及代码实现的相关文章

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

Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现

LPA算法的思路: 首先每个节点有一个自己特有的标签,节点会选择自己邻居中出现次数最多的标签,如果每个标签出现次数一样多,那么就随机选择一个标签替换自己原始的标签,如此往复,直到每个节点标签不再发生变化,那么持有相同标签的节点就归为一个社区. 算法优点:思路简单,时间复杂度低,适合大型复杂网络. 算法缺点:众所周知,划分结果不稳定,随机性强是这个算法致命的缺点. 体现在:(1)更新顺序.节点标签更新顺序随机,但是很明显,越重要的节点越早更新会加速收敛过程 (2)随机选择.如果一个节点的出现次数最

标签传播算法

参考文献:http://blog.csdn.net/cleverlzc/article/details/39494957Gephi 是一款网络分析领域的可视化处理软件,可以用于数据分析,链接分析,社交网络分析等.标签传播算法LPA(Label Propagation Algorithm)最早是针对社区发现问题提出时的一种解决方案.主要优点有:时间复杂度(近似线性),不需要事先知道社区数量.主要算法流程:首先为每个节点设置唯一标签,接着迭代依次更新各个节点,针对每个节点,通过统计节点邻居的标签,选

UCI标签传播算法

半监督学习 顾名思义是介于分类(监督学习)与聚类(无监督学习)之间的一种学习范式.给定很少一部分样本的类标签,怎么样利用少部分具有类标签的数据来提高聚类的准确率是其研究主题.其中基于图的标签传播(Label Propagation)算法是有影响的算法之一. UCI机器学习数据库:http://archive.ics.uci.edu/ml/ 原理:某个测试用例的对象的标签(类别)和它附近的对象的标签相同,我们可以根据距离或者相似性来为两个对象设定一个权重.如果a和b的距离越小或者相似性越大的,则a

标签传播算法(llgc 或 lgc)

动手实践标签传播算法 初始化算法 载入一些必备的库: from IPython.display import set_matplotlib_formats %matplotlib inline #set_matplotlib_formats('svg', 'pdf') import numpy as np import matplotlib.pyplot as plt from scipy.spatial.distance import cdist from sklearn.datasets i

《神经网络和深度学习》系列文章十六:反向传播算法代码

出处: Michael Nielsen的<Neural Network and Deep Learning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR硕士生 李盛秋 声明:如需转载请联系[email protected],未经授权不得转载. 使用神经网络识别手写数字 反向传播算法是如何工作的 热身:一个基于矩阵的快速计算神经网络输出的方法 关于损失函数的两个假设 Hadamard积 反向传播背后的四个基本等式 四个基本等式的证明(选读) 反向传播算法 反向传播算法代码

神经网络和反向传播算法推导

注:由于自己画图实在太难画,本文中基本所有插图来源于算法团子机器学习班,请勿转载 1.普通的机器学习模型: 其实,基本上所有的基本机器学习模型都可以概括为以下的特征:根据某个函数,将输入计算并输出.图形化表示为下图: 当我们的g(h)为sigmoid函数时候,它就是一个逻辑回归的分类器.当g(h)是一个只能取0或1值的函数时,它就是一个感知机.那么问题来了,这一类模型有明显缺陷:当模型线性不可分的时候,或者所选取得特征不完备(或者不够准确)的时候,上述分类器效果并不是特别喜人.如下例: 我们可以

神经网络训练中的Tricks之高效BP(反向传播算法)

神经网络训练中的Tricks之高效BP(反向传播算法) 神经网络训练中的Tricks之高效BP(反向传播算法) [email protected] http://blog.csdn.net/zouxy09 Tricks!这是一个让人听了充满神秘和好奇的词.对于我们这些所谓的尝试应用机器学习技术解决某些问题的人,更是如此.曾记得,我们绞尽脑汁,搓手顿足,大喊“为什么我跑的模型不work?”,“为什么我实现的效果那么差?”,“为什么我复现的结果没有他论文里面说的那么好?”.有人会和你说“你不懂调参!

java算法插入排序优化代码

原文:java算法插入排序优化代码 代码下载地址:http://www.zuidaima.com/share/1550463280630784.htm 一个细节让插入排序更具效率 运行此方法需要为main方法传递参数 package com.zuidaima.sort; /** *@author www.zuidaima.com **/ public class TestSort { public static void main(String args[]){ int l = args.len