概述
自组织神经网络
引用文本package 自组织神经网络;
import java.util.Random;
public class SOMMain {
double eta = 0.1;
public int findMinIndex(double x, double w[]) {
double index[] = new double[w.length];
for (int j = 0; j < w.length; j++) {
index[j] = Math.abs(x - w[j]);
// System.out.print("index=" + index[j]);
}
int min = 0;
double minindex = index[0];
for (int i = 0; i < w.length; i++) {
if (minindex < index[i]) {
minindex = index[i];
min = i;
}
}
w[min] = w[min] + eta * (x - w[min]);
return min + 1;
}
public static void main(String[] args) {
SOMMain somMain = new SOMMain();
Random random = new Random();
int clazzCount = 3;
int sampleCount = 12;
double w[] = new double[clazzCount];
double x[] = new double[sampleCount];
// ArrayList<Double> lists = new ArrayList<>();
System.out.println("初始化权值:");
for (int i = 0; i < x.length; i++) {
x[i] = random.nextDouble() * 10;// 生成样本
System.out.print(x[i] + " ");
}
System.out.println();
for (int i = 0; i < w.length; i++) {
w[i] = random.nextDouble() * 10;
System.out.print(w[i] + " ");
}
System.out.println();
System.out.println("归一化样本");
double sum = 0;
for (double d : x) {
sum += d;
}
double normX[] = new double[sampleCount];
for (int i = 0; i < x.length; i++) {
normX[i] = x[i] / sum;
}
System.out.println("开始训练");
int runMax = 100;
// double err;
// double minIndex;
int num[] = new int[normX.length];
while (runMax > 0) {
runMax--;
// minIndex = 0;
// err = 1e3;
for (int i = 0; i < normX.length; i++) {
num[i] = somMain.findMinIndex(x[i], w);
}
}
System.out.println("训练完毕,进行测试");
for (int i = 0; i < x.length; i++) {
System.out.println("样本" + (i + 1) + "的值是:" + x[i] + "属于第" + num[i] + "类");
}
}
}
最后
以上就是开朗狗为你收集整理的自组织神经网络的全部内容,希望文章能够帮你解决自组织神经网络所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复