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

📄 unit2.pas

📁 使用Iris数据集
💻 PAS
📖 第 1 页 / 共 3 页
字号:
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 + -