Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовой проект групп 3341 и 3382 / FilterModule / NominalToBinary
.pas unit NominalToBinary;
interface
uses
SysUtils,
Classes,
SerializableObject,
FastVector,
Filter,
Instances,
DmmTypes,
Attribute;
type
TDMNominalToBinary = class(TDMFilter)
public
function convertInstance(instance : TDMInstance) : TDMInstance;override;
function useFilter(instances : TDMInstances) : TDMInstances;override;
end;
implementation
//Преобразует множество
function TDMNominalToBinary.useFilter(instances : TDMInstances) : TDMInstances;
var
i,j:integer;
newInstance:TDMInstance;
newInstances:TDMInstances;
attrs:TDMFastVector;
begin
attrs := TDMFastVector.Create;
for j := 0 to instances.numAttributes()-1 do
begin
if (instances.attribute(j).isNominal())and (instances.attribute(j).numValues() > 2) then
begin
for i:=0 to instances.attribute(j).numValues()-1 do
attrs.addElement( TDMAttribute.Create( instances.attribute(j).name + IntToStr(i)));
end
else
begin
attrs.addElement( TDMAttribute.Create( instances.attribute(j).name));
end;
end;
newInstances:=TDMInstances.Create('dataset_1', attrs, instances.numInstances);
for i := 0 to instances.NumInstances-1 do
begin
newInstance:=ConvertInstance(instances.instance(i));
newInstances.add(newInstance);
end;
Result:=newInstances;
end;
//Преобразует вектор, если атрибут номинальный .
function TDMNominalToBinary.ConvertInstance(instance:TDMInstance):TDMInstance;
var
vals:TDMInstanceValues;
attSoFar,j,NewNumAttr:integer;
inst:TDMInstance;
att:TDMAttribute;
k:integer;
begin
attSoFar := 0;
NewNumAttr:=0;
for j := 0 to instance.numAttributes()-1 do
begin
if (instance.attribute(j).isNominal())and (instance.attribute(j).numValues() > 2) then
NewNumAttr := NewNumAttr + instance.attribute(j).numValues()
else
NewNumAttr := NewNumAttr+1;
end;
SetLength(vals,NewNumAttr);
for j := 0 to instance.numAttributes()-1 do
begin
att:=TDMAttribute.Create();
att := instance.attribute(j);
if (not att.isNominal()) then
begin
vals[attSoFar] := instance.value(j);
inc(attSoFar);
end
else
begin
if (att.numValues() <= 2) then
begin
vals[attSoFar] := instance.value(j);
inc(attSoFar);
end
else
begin
if (instance.isMissing(j)) then
for k := 0 to att.numValues()-1 do
vals[attSoFar + k] := instance.value(j)
else
begin
for k := 0 to att.numValues()-1 do
begin
if (k = trunc(instance.value(j))) then
vals[attSoFar + k] := 1
else
vals[attSoFar + k] := 0;
end;
end;
attSoFar := attSoFar + att.numValues();
end;
end;
end;
inst := nil;
inst := TDMInstance.Create(instance.weight(), vals,NewNumAttr);
Result:=inst;
end;
end.
interface
uses
SysUtils,
Classes,
SerializableObject,
FastVector,
Filter,
Instances,
DmmTypes,
Attribute;
type
TDMNominalToBinary = class(TDMFilter)
public
function convertInstance(instance : TDMInstance) : TDMInstance;override;
function useFilter(instances : TDMInstances) : TDMInstances;override;
end;
implementation
//Преобразует множество
function TDMNominalToBinary.useFilter(instances : TDMInstances) : TDMInstances;
var
i,j:integer;
newInstance:TDMInstance;
newInstances:TDMInstances;
attrs:TDMFastVector;
begin
attrs := TDMFastVector.Create;
for j := 0 to instances.numAttributes()-1 do
begin
if (instances.attribute(j).isNominal())and (instances.attribute(j).numValues() > 2) then
begin
for i:=0 to instances.attribute(j).numValues()-1 do
attrs.addElement( TDMAttribute.Create( instances.attribute(j).name + IntToStr(i)));
end
else
begin
attrs.addElement( TDMAttribute.Create( instances.attribute(j).name));
end;
end;
newInstances:=TDMInstances.Create('dataset_1', attrs, instances.numInstances);
for i := 0 to instances.NumInstances-1 do
begin
newInstance:=ConvertInstance(instances.instance(i));
newInstances.add(newInstance);
end;
Result:=newInstances;
end;
//Преобразует вектор, если атрибут номинальный .
function TDMNominalToBinary.ConvertInstance(instance:TDMInstance):TDMInstance;
var
vals:TDMInstanceValues;
attSoFar,j,NewNumAttr:integer;
inst:TDMInstance;
att:TDMAttribute;
k:integer;
begin
attSoFar := 0;
NewNumAttr:=0;
for j := 0 to instance.numAttributes()-1 do
begin
if (instance.attribute(j).isNominal())and (instance.attribute(j).numValues() > 2) then
NewNumAttr := NewNumAttr + instance.attribute(j).numValues()
else
NewNumAttr := NewNumAttr+1;
end;
SetLength(vals,NewNumAttr);
for j := 0 to instance.numAttributes()-1 do
begin
att:=TDMAttribute.Create();
att := instance.attribute(j);
if (not att.isNominal()) then
begin
vals[attSoFar] := instance.value(j);
inc(attSoFar);
end
else
begin
if (att.numValues() <= 2) then
begin
vals[attSoFar] := instance.value(j);
inc(attSoFar);
end
else
begin
if (instance.isMissing(j)) then
for k := 0 to att.numValues()-1 do
vals[attSoFar + k] := instance.value(j)
else
begin
for k := 0 to att.numValues()-1 do
begin
if (k = trunc(instance.value(j))) then
vals[attSoFar + k] := 1
else
vals[attSoFar + k] := 0;
end;
end;
attSoFar := attSoFar + att.numValues();
end;
end;
end;
inst := nil;
inst := TDMInstance.Create(instance.weight(), vals,NewNumAttr);
Result:=inst;
end;
end.
Соседние файлы в папке FilterModule