⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linctrainwidro0.m

📁 一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有用,谢谢支持
💻 M
字号:
function coef=linClassifier(DS, trainParam, plotOpt)
% linClassifier: Linear classifier (Perceptron) using on-line learning
%
%	Type "linClassifier" for a demo.

% Roger Jang, 20040910 

if nargin<1, selfdemo; return; end
if nargin<2 | isempty(trainParam),
	trainParam.eta=0.0002;
	trainParam.maxIter=3000;
end
if nargin<3, plotOpt=0; end

[dim, dataNum]=size(DS.input);

if plotOpt==1 & dim==2,
	dcprDataPlot(DS);
	axis image
	lineH = line([-1 1], [-1 1], 'linewidth', 2, 'erase', 'xor', 'color', 'm');
	r = 0.1;
	theta = linspace(0, 2*pi);
	circleX = r*cos(theta); 
	circleY = r*sin(theta); 
	circleH = line(nan, nan, 'color', 'k', 'erase', 'xor');
end

uniqueOutput=unique(DS.output);
if length(uniqueOutput)~=2, error('Must be 2-class problem!'); end
% 盢 DS.output эΘ -1 ┪ 1
index=find(DS.output==max(uniqueOutput));
DS.output=-ones(1, size(DS.output,2));
DS.output(index)=1;

% The main loop
coef=randn(dim+1,1);

for i=1:trainParam.maxIter
	picked = ceil(rand*dataNum);
	input = DS.input(:, picked);
	target = DS.output(:, picked);
	computed = sign(dot(coef, [input; 1]));
	coef=coef+trainParam.eta*(target-computed)*[input; 1];
	if plotOpt==1 & dim==2,
		set(circleH, 'xdata', circleX+DS.input(1, picked), 'ydata', circleY+DS.input(2, picked));
		set(lineH, 'ydata', [coef(1)-coef(3), -coef(1)-coef(3)]/coef(2));
		fprintf('iteration = %d\n', i);
		drawnow
	end
end

% ====== Self demo
function coef=selfdemo

dataNum = 2000;
DS.input = rand(2, dataNum)*2-1;
DS.output = -ones(1, dataNum);
index = find(DS.input(1, :)+DS.input(2, :)>0);
DS.output(index)=1;
plotOpt=1;
coef=feval(mfilename, DS, [], plotOpt);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -