Скачиваний:
28
Добавлен:
01.05.2014
Размер:
3.45 Кб
Скачать
unit SplitClass;

interface

uses

Instances,
DmmTypes,
Utils,
RuleItem,
ItemSet,
DMMConstants,
Classes,
DistributionClass;

type

TDMInstanceArray = array of TDMInstances;

Split = class

protected

// Distribution of class values.
m_distribution: Distribution;

// Number of created subsets.
m_numSubsets: integer;


public

function getDistribution():Distribution;

function numSubsets():integer;

procedure buildClassifier(trainInstances: TDMInstances); virtual; abstract;

function checkModel(): boolean; virtual; abstract;

function infoGain(): double; virtual; abstract;

function gainRatio(): double; virtual; abstract;

function attIndex(): integer; virtual; abstract;

procedure setSplitPoint(allInstances: TDMInstances); virtual; abstract;

function split(data: TDMInstances): TDMInstanceArray; virtual; abstract;

function getWeights(instance: TDMInstance): DArray; virtual; abstract;

function whichSubset(instance: TDMInstance): integer; virtual; abstract;

procedure resetDistribution(data: TDMInstances); virtual; abstract;

function dumpLabel(index: integer; data: TDMInstances): String;

function leftSide(data: TDMInstances): String; virtual; abstract;

function rightSide(index: integer; data: TDMInstances): String; virtual; abstract;

procedure setDistribution(distribution: Distribution);

function dumpRule(index: integer; data: TDMInstances; ruleItem: TDMRuleItem): TDMRuleItem;


end;
implementation

uses SysUtils;

function Split.getDistribution():Distribution;
begin
result := m_distribution;
end;

function Split.numSubsets():integer;
begin
result := m_numSubsets;
end;


function Split.dumpLabel(index: integer; data: TDMInstances): String;
var
text: String;
begin
text := text + data.classAttribute().value(m_distribution.maxClassI(index));
text := text + ' ('+ IntToStr(trunc(Utils.roundDouble(m_distribution.perBag(index),2)));
if (Utils.gr(m_distribution.numIncorrectI(index),0))
then
text := text + '/'+IntToStr(trunc(Utils.roundDouble(m_distribution.numIncorrectI(index),2)));
text := text + ')';

result := text;
end;


function Split.dumpRule(index: integer; data: TDMInstances; ruleItem: TDMRuleItem): TDMRuleItem;
var
right: TDMItemSet;
values: IArray;
relations: IArray;
i: integer;
list: TList;
begin
// right := data.classAttribute().value(m_distribution.maxClassI(index));
setLength(values, data.numAttributes);
setLength(relations, data.numAttributes);
for i := 0 to data.numAttributes-1
do
begin
values[i] := IMIN_VALUE;
relations[i] := IMIN_VALUE;
end;
values[data.classIndex] := m_distribution.maxClassI(index);
relations[data.classIndex] := 1;
right := TDMItemSet.create(values, relations);

{ text := text + ' ('+ IntToStr(trunc(Utils.roundDouble(m_distribution.perBag(index),2)));
if (Utils.gr(m_distribution.numIncorrectI(index),0))
then
text := text + '/'+IntToStr(trunc(Utils.roundDouble(m_distribution.numIncorrectI(index),2)));
text := text + ')';}
ruleItem.m_consequence := right;
result := ruleItem;
end;

procedure Split.setDistribution(distribution: Distribution);
begin
m_distribution := distribution;
end;

end.
Соседние файлы в папке j48