Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовой проект групп 3341 и 3382 / j48 / SplitClass
.pas 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.
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