lpa标签传播算法解说及代码实现
2024-09-05 21:59:18
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;
}
}
最新文章
- &;nbsp;空格用法
- 从service弹出系统级自定义提示框,可在任意页面弹出
- Android Toast效果
- 通过实验分析system_call中断处理过程
- 数学概念——H 最美素数
- JavaScript中的this引用
- Java中的Lock锁
- git/gerrit的简介
- 【洛谷P2860】冗余路径
- 免费API接口
- ASP.NET MVC下使用AngularJs语言(四):$window.alert
- kafka TimeoutException 超时问题解决
- Orchard Core 版本冲突 The type &#39;FormTagHelper&#39; exists in both &#39;Microsoft.AspNetCore.Mvc.TagHelpers, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60&#39; and...
- 查看oracle数据库允许的最大连接数和当前连接数
- TP3.2校验微信公众号||小程序 服务器地址
- 使用FlashPaper在线转换.doc为.swf_实用技巧
- C#如何获取枚举(Enum)变量的值
- shell 数组【了解一下】
- shell编程基础-01
- springboot 常用依赖
热门文章
- 框架-Java:Spring Cloud
- [转载]Windows&;nbsp;Server&;nbsp;2008&;nbsp;R2&;nbsp;之二十五AD&;nbsp;RMS信任策略
- [JavaEE] 20141228_Java类文章搜集
- Xposed那些事儿 — xposed框架的检测和反制
- Hashmap 详解和迭代器问题
- Mac OS X10.9安装的Python2.7升级Python3.4步骤详解
- html/css常用合集
- Linux下实现视频读取
- 关于HTTPS通信机制的笔记
- 关于用户禁用Cookie的解决办法和Session的图片验证码应用