📄 unitmain.pas
字号:
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, SMO_SVM,unitypes;
type
TFrmMain = class(TForm)
ImgPoint: TImage;
BtnTrain: TButton;
BtnPredict: TButton;
RdbRed: TRadioButton;
RdbBlue: TRadioButton;
procedure BtnPredictClick(Sender: TObject);
procedure ImgPointMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure BtnTrainClick(Sender: TObject);
private
MySVM: TSVM;
public
{ Public declarations }
end;
var
FrmMain: TFrmMain;
implementation
{$R *.dfm}
procedure TFrmMain.BtnPredictClick(Sender: TObject);
var
i, j, X, Y: longint;
point: TSingleExtendedArray;
begin
setlength(Point, 2);
for i := 0 to 320 do
for j := 0 to 320 do begin
point[0] := i / 320; point[1] := j / 320;
if MySVM.Predict(Point) > 0 then
ImgPoint.Canvas.Pixels[i, j] := clRed
else ImgPoint.Canvas.Pixels[i, j] := clBlue;
end;
for i := 0 to MySVM.end_support_i - 1 do begin
X := trunc(MySVM.Vectors[i].Items[0] * 320);
Y := trunc(MySVM.Vectors[i].Items[1] * 320);
if MySVM.Vectors[i].Target > 0 then begin
ImgPoint.Canvas.Pen.Style := psClear;
ImgPoint.Canvas.Brush.Color := $8080FF;
ImgPoint.Canvas.Ellipse(X - 4, Y - 4, X + 4, Y + 4);
end else begin
ImgPoint.Canvas.Pen.Style := psClear;
ImgPoint.Canvas.Brush.Color := $FF8080;
ImgPoint.Canvas.Ellipse(X - 4, Y - 4, X + 4, Y + 4);
end;
end;
end;
procedure TFrmMain.ImgPointMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
point: TSingleExtendedArray;
Outs: Extended;
begin
setlength(Point, 2);
point[0] := X / 320;
point[1] := Y / 320;
if rdbred.Checked then outs := 1 else outs := -1;
MySVM.LearnExamples(point, outs);
if rdbred.Checked then begin
ImgPoint.Canvas.Pen.Style := psClear;
ImgPoint.Canvas.Brush.Color := $8080FF;
ImgPoint.Canvas.Ellipse(X - 3, Y - 3, X + 3, Y + 3);
end else begin
ImgPoint.Canvas.Pen.Style := psClear;
ImgPoint.Canvas.Brush.Color := $FF8080;
ImgPoint.Canvas.Ellipse(X - 3, Y - 3, X + 3, Y + 3);
end;
end;
procedure TFrmMain.FormCreate(Sender: TObject);
begin
MySVM := TSVM.Create;
MySVM.Init(2, 1, 1, 2, 1, 8, klGsRBF);
DoubleBuffered := True;
ImgPoint.Canvas.FillRect(Rect(0, 0, 3200, 320));
end;
procedure TFrmMain.FormDestroy(Sender: TObject);
begin
MySVM.Free;
end;
procedure TFrmMain.BtnTrainClick(Sender: TObject);
begin
MySVM.Learn;
Application.MessageBox(PChar('There are/is ' + IntToStr(MySVM.Optimize) + ' support vector(s).'), 'Result');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -