📄 unit2.pas
字号:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls, jpeg;
type
TForm2 = class(TForm)
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
BitBtn1: TBitBtn;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Edit13: TEdit;
Edit14: TEdit;
Edit15: TEdit;
Edit16: TEdit;
Edit17: TEdit;
Edit18: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
BitBtn2: TBitBtn;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
Bevel4: TBevel;
Bevel5: TBevel;
Bevel6: TBevel;
StaticText1: TStaticText;
DataSource2: TDataSource;
ADOQuery2: TADOQuery;
DBGrid2: TDBGrid;
StaticText2: TStaticText;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Edit19: TEdit;
Edit20: TEdit;
BitBtn3: TBitBtn;
Image1: TImage;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
BitBtn6: TBitBtn;
Edit21: TEdit;
Edit22: TEdit;
Edit23: TEdit;
Edit24: TEdit;
Bevel7: TBevel;
Bevel8: TBevel;
Bevel9: TBevel;
Edit25: TEdit;
Edit26: TEdit;
Edit27: TEdit;
Edit28: TEdit;
Edit29: TEdit;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
//┌-----------------------------------------------------┐
//|(1)对数据分类, |
//| 把sepal_length,sepal_width, |
//| petal_length,petal_width三等分 |
//└-----------------------------------------------------┘
var
min_sl:double; //max_sl是 最大花萼长 , min_sl是 最小花萼长
min_sw:double; //max_sw是 最大花萼宽 ,min_sw是 最小花萼宽
min_pl:double; //max_pl是 最大花瓣长 , min_sl是 最小花瓣长
min_pw:double; //max_pw是 最大花瓣宽 ,min_pw是 最小花瓣宽
delta_sl:double; //三分之一的(最大花萼长-最小花萼长)
delta_sw:double; //三分之一的(最大花萼宽-最小花萼宽)
delta_pl:double; //三分之一的(最大花瓣长-最小花瓣长)
delta_pw:double; //三分之一的(最大花瓣宽-最小花瓣宽)
nSt,nVc,nVg:integer; //nSt:Iris-setosa的个数,nVc:Iris-versicolor的个数,nVg:Iris-virginica的个数
nC1_setosa:integer;
p_C1_setosa:double; //P(C1| setosa)概率
nC1_vc:integer;
p_C1_vc:double; //P(C1| versicolor)概率
nIris:integer;
p_C1_vg:double; //P(C1| virginica)概率
nC2_setosa:integer;
p_C2_setosa:double; //P(C2| setosa)概率
nC2_vc:integer;
p_C2_vc:double; //P(C2| versicolor)概率
p_C2_vg:double; //P(C2| virginica)概率
nC3_setosa:integer;
p_C3_setosa:double; //P(C3| setosa)概率
nC3_vc:integer;
p_C3_vc:double; //P(C3| versicolor)概率
p_C3_vg:double; //P(C3| virginica)概率
//----------------------------------
nD1_setosa:integer;
p_D1_setosa:double; //P(D1| setosa)概率
nD1_vc:integer;
p_D1_vc:double; //P(D1| versicolor)概率
p_D1_vg:double; //P(D1| virginica)概率
nD2_setosa:integer;
p_D2_setosa:double; //P(D2| setosa)概率
nD2_vc:integer;
p_D2_vc:double; //P(D2| versicolor)概率
p_D2_vg:double; //P(D2| virginica)概率
nD3_setosa:integer;
p_D3_setosa:double; //P(D3| setosa)概率
nD3_vc:integer;
p_D3_vc:double; //P(D3| versicolor)概率
p_D3_vg:double; //P(D3| virginica)概率
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
Label19.Caption:='训练后';
//查询 nIris :训练集的记录数
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select count(*) 记录数 from iris');
adoquery1.Open;
nIris:=adoquery1.FieldByName('记录数').asInteger;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select count(*) st记录数 from iris where class='+'''Iris-setosa''');
adoquery1.Open;
nSt:=adoquery1.FieldByName('st记录数').asInteger;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select count(*) vc记录数 from iris where class='+'''Iris-versicolor''');
adoquery1.Open;
nVc:=adoquery1.FieldByName('vc记录数').asInteger;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select count(*) vg记录数 from iris where class='+'''Iris-virginica''');
adoquery1.Open;
nVg:=adoquery1.FieldByName('vg记录数').asInteger;
//查询 min_sl :最小花萼长
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select min(sepal_length) 最小花萼长 from iris');
adoquery1.Open;
min_sl:=adoquery1.FieldByName('最小花萼长').asFloat;
//查询delta_sl :三分之一的(最大花萼长-最小花萼长)
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select (max(sepal_length)-min(sepal_length))/3 每段花萼长 from iris');
adoquery1.Open;
delta_sl:=adoquery1.FieldByName('每段花萼长').AsFloat;
//对sepal_length(花萼长)进行划分,把落在区间[min_sl,min_sl+delta_sl) 的值 标记为 'A1'
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update iris set SL='+' ''A1'' where (sepal_length>= '+FloattoStr(min_sl)+' ) and sepal_length<'+FloattoStr(delta_sl+min_sl)+'');
adoquery1.execSQL;
//同理,把落在[min_sl+delta_sl,min_sl+2*delta_sl)区间的值 标记为 'A2'
//(默认是'A3',所以最后一个划分区间可不写)
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update iris set SL='+' ''A2'' where (sepal_length>= '+FloattoStr(min_sl+delta_sl)+' ) and sepal_length<'+FloattoStr(2*delta_sl+min_sl)+'');
adoquery1.execSQL;
//-----对sepal_width(花萼宽)进行划分----------------
//查询 min_sw :最小花萼宽
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select min(sepal_width) 最小花萼宽 from iris');
adoquery1.Open;
min_sw:=adoquery1.FieldByName('最小花萼宽').asFloat;
//查询delta_sw :三分之一的(最大花萼宽-最小花萼宽)
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select (max(sepal_width)-min(sepal_width))/3 每段花萼宽 from iris');
adoquery1.Open;
delta_sw:=adoquery1.FieldByName('每段花萼宽').AsFloat;
//对sepal_length(花萼宽)进行划分,把落在区间[min_sw,min_sw+delta_sw) 的值 标记为 'B1'
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update iris set SW='+' ''B1'' where (sepal_width>= '+FloattoStr(min_sw)+' ) and sepal_width<'+FloattoStr(delta_sw+min_sw)+'');
adoquery1.execSQL;
//同理,把落在[min_sw+delta_sw,min_sw+2*delta_sw)区间的值 标记为 'B2'
//(默认是'B3',所以最后一个划分区间可不写)
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update iris set SW='+' ''B2'' where (sepal_width>= '+FloattoStr(min_sw+delta_sw)+' ) and sepal_width<'+FloattoStr(2*delta_sw+min_sw)+'');
adoquery1.execSQL;
//---------对petal_length划分----------------------------------------------------
//查询 min_pl :最小花瓣长
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select min(petal_length) 最小花瓣长 from iris');
adoquery1.Open;
min_pl:=adoquery1.FieldByName('最小花瓣长').asFloat;
//查询delta_pl :三分之一的(最大花萼长-最小花萼长)
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select (max(petal_length)-min(petal_length))/3 每段花瓣长 from iris');
adoquery1.Open;
delta_pl:=adoquery1.FieldByName('每段花瓣长').AsFloat;
//对sepal_length(花瓣长)进行划分,把落在区间[min_pl,min_pl+delta_pl) 的值 标记为 'C1'
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update iris set PL='+' ''C1'' where (petal_length>= '+FloattoStr(min_pl)+' ) and petal_length<'+FloattoStr(delta_pl+min_pl)+'');
adoquery1.execSQL;
//同理,把落在[min_pl+delta_pl,min_pl+2*delta_pl)区间的值 标记为 'C2'
//(默认是'C3',所以最后一个划分区间可不写)
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update iris set PL='+' ''C2'' where (petal_length>= '+FloattoStr(min_pl+delta_pl)+' ) and petal_length<'+FloattoStr(2*delta_pl+min_pl)+'');
adoquery1.execSQL;
//----------对petal_width划分--------------------------------------------------------------
//查询 min_pw :最小花瓣宽
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select min(petal_width) 最小花瓣宽 from iris');
adoquery1.Open;
min_pw:=adoquery1.FieldByName('最小花瓣宽').asFloat;
//查询delta_sw :三分之一的(最大花瓣宽-最小花瓣宽)
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select (max(petal_width)-min(petal_width))/3 每段花瓣宽 from iris');
adoquery1.Open;
delta_pw:=adoquery1.FieldByName('每段花瓣宽').AsFloat;
//对petal_length(花瓣宽)进行划分,把落在区间[min_pw,min_pw+delta_pw) 的值 标记为 'D1'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -