博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#与matlab混合编程(2)k-means算法
阅读量:4334 次
发布时间:2019-06-07

本文共 2105 字,大约阅读时间需要 7 分钟。

1.matlab函数

% k_means algorithm

% data: 需要分类的数据,列:特征 行:样本
% k: 需要分类数, iter: 迭代次数,默认为样本个数 threshold 为前后两次均值差的平方和的阈值,
%低于该阈值则认为收敛,停止搜索,由于不同情况下阈值差异较大,故默认为0,由增加迭代次数来保证结果的收敛
function [u,myclass] = mykmeans(data, k, iter, threshold)
[row, col] = size(data);
u = data(randint(1,k,[1,row]),:);
u_backup = u;
if iter == 0
    iter = row;
end
diff = zeros(k,col);
for j = 1:iter
myclass = zeros(k,row);
add = zeros(k,col);
for i = 1:row
    for m = 1:k
     diff(m,:) = data(i,:) - u(m,:);
    end
    distance = diag(diff * diff');
    [~, min_num] = min(distance);
    myclass(min_num,i) = 1; % 将属于该类的样本标记为1
    add(min_num,:) = add(min_num,:) + data(i,:);
end
for n = 1:k
    u(n,:) = add(n,:)/length(find(myclass(n,:)==1));
end
  tr = trace((u - u_backup) * (u - u_backup)');
  if(threshold ~= 0 && tr < threshold)
      break;
  end
end

2.C#下混合编程

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using matPrj;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
namespace mykmeans
{
    class Program
    {
        static void Main(string[] args)
        {
            myMathclass myfun = new myMathclass();
            StreamReader mydata_row = new StreamReader("data.txt");
            string line = null;
            Int16 row = 0;
            while ((line = mydata_row.ReadLine()) != null)
            {
                row++;
            }
            mydata_row.Close();
            double[] data = new double[row * 2];
            StreamReader mydata = new StreamReader("data.txt");
            Int16 i = 0;
            while ((line = mydata.ReadLine()) != null)
            {
                
                foreach (string str in line.Split(','))
                {
                    data[i] = Convert.ToInt16(str);
                    i++;
                }
                
            }
            MWNumericArray m_data = new MWNumericArray(16 , 2, data);
            MWArray[] output = new MWArray[2];
            MWArray[] input = new MWArray[4] { m_data, 2, 0, 0};
            myfun.mykmeans (2, ref output, input);
            MWNumericArray x1 = output[0] as MWNumericArray;
            MWNumericArray x2 = output[1] as MWNumericArray;
            
        }
    }
}

3. 测试数据(分两类)

1,2

2,3
3,4
1,3
2,4
5,8
1,9
2,8
11,34
56,9
110,234
239,300
123,456
232,222
194,254
788,234

4.结果

u =

    8.4000    8.4000
  281.0000  283.3333
myclass =
  Columns 1 through 12
     1     1     1     1     1     1     1     1     1     1     0     0
     0     0     0     0     0     0     0     0     0     0     1     1
  Columns 13 through 16
     0     0     0     0
     1     1     1     1

转载于:https://www.cnblogs.com/newly/archive/2013/01/20/2868857.html

你可能感兴趣的文章
学习操作系统导图
查看>>
在线的JSON formate工具
查看>>
winform非常实用的程序退出方法!!!!!(转自博客园)
查看>>
xml解析
查看>>
centos安装vim
查看>>
linux工作调度(计划任务)
查看>>
hdu--1698 Just a Hook(线段树+区间更新+懒惰标记)
查看>>
Python学习笔记-EXCEL操作
查看>>
SQL语句、PL/SQL块和SQL*Plus命令之间的区别
查看>>
mysql 解压版 配置
查看>>
cs231n spring 2017 Python/Numpy基础
查看>>
判断对象是否遵守某个协议、方法
查看>>
python sys模块
查看>>
4_函数
查看>>
sqlconnection dispose()与close()的区别
查看>>
git 一般用法
查看>>
Json
查看>>
poj1236Network of Schools Tarjan裸题
查看>>
项目管理过程
查看>>
泛型使用
查看>>