const
{$IFDEF PAIDVERS}
SDLVersionInfo = 'membl_r1210_full';
IsLightEd = false;
{$ELSE}
SDLVersionInfo = 'membl_r1210_lighted';
IsLightEd = true;
{$ENDIF}
Release = 1210;
const
MBLMAXNEIGHBORS = 100; { max. number of neighbors in Mem.Based Learners }
MBLVersion = '1.001'; { version number, must have 3 dec. places }
type
TMBLScalingMode = (mblUnscaled, mblStandardized);
TMBLVarType = (mblVarIgnore, mblVarIndep, mblVarTarget);
TMBLDistMode = (mblDistEuclid, mblDistManhattan, mblDistMahalanobis);
TMBLLocalModel = (mblLMAverage, mblLMWgtGauss, mblLMMajority, mblLMRegress);
const
MBLDistModeID : array[TMBLDistMode] of string =
('Euclidean', 'Manhattan', 'Mahalanobis');
MBLScalingModeID : array[TMBLScalingMode] of string =
('Unscaled', 'Standardized');
MBLLocalModelID : array[TMBLLocalModel] of string =
('Average', 'Weighted Average',
'Majority Vote', 'Regression');
type
TOnMBLModelApplied = procedure (Sender: TObject; Tag: integer;
NearNix: TIntArray; NearNDist: TDoubleArray;
errnum: integer) of object;
TMBLxmlTags = (xmlMBLId, xmlComment, xmlModelName, xmlModelData, xmlDistMode,
xmlSclMode, xmlLocalModel, xmlNumNNb, xmlInvalid);
{$IFDEF GE_LEV29}
[ComponentPlatformsAttribute(pidWin32 or pidWin64 or pidWin64x)]
{$ENDIF}
TMemBasedLearner = class (TComponent)
private
FModelName : string; // name of training data set
FComment : string;
FMeanVarRange : TMatrix; // mean, var, min, max of all vars
FNumNearestNb : integer; // number of nearest neighbors
FLocModel : TMBLLocalModel;
FDistMode : TMBLDistMode;
FScalingMode : TMBLScalingMode;
FOnPercentDone : TOnPercentDoneEvent;
FOnCheckCVDAbort: TOnCheckAbortEvent;
FOnModelApplied : TOnMBLModelApplied;
FNNList : TInt2DArray;
FNNDist : TDouble2DArray;
function GetVarType (ix: integer): TMBLVarType;
procedure SetVarType (ix: integer; value: TMBLVarType);
procedure SetNumNearestNb (nb: integer);
function GetkNNofModelData (k, obj: integer): integer;
function GetkNNDistofModelData (k, obj: integer): double;
procedure DataTableChanged(Sender: TObject);
function CalcDist (Sensor: TDoubleArray; MIx: integer): double;
procedure PercDone (Sender: TObject; Percent: longint);
function ProcessXmlTag (xmlTag: TMBLXmlTags; attr, cont: string;
default: string; ParentTag: integer): integer;
public
ModelData : TDataTable; // model data;
// col. attrib. indicate variable types
constructor Create (AOwner: TComponent); override;
destructor Destroy; override;
function ApplyModel (Sensor: TDoubleArray;
ExcludeObj, Tag: integer): integer;
function CalcContingencyTable (VarIx, NumNb: integer;
var ContTab: TInt2DArray): integer;
procedure CalcNNOfModelData;
function CountIndependentVars: integer;
function CountTargetVars: integer;
function LoadModelBin (FName: string; var DataId: string): integer;
function LoadModelXML (FName: string; var DataId: string): integer;
property ModelName: string read FModelName write FModelName;
procedure SetAllVars (VarType: TMBLVarType);
procedure StoreModelBin (FName: string; DataID: string);
procedure StoreModelXML (FName: string; DataID: string);
property VarType[ix: integer]: TMBLVarType
read GetVarType write SetVarType;
property kNNOfModelData [k,obj: integer]: integer
read GetkNNofModelData;
property kNNDistOfModelData [k,obj: integer]: double
read GetkNNDistofModelData;
published
property Comment: string read FComment write FComment;
property DistMode: TMBLDistMode read FDistMode write FDistMode;
property LocalModel: TMBLLocalModel read FLocModel write FLocModel;
property NumNearestNb: integer
read FNumNearestNb write SetNumNearestNb;
property ScalingMode: TMBLScalingmode
read FScalingMode write FScalingMode;
property OnModelApplied: TOnMBLModelApplied
read FOnModelApplied write FOnModelApplied;
property OnPercentDone: TOnPercentDoneEvent
read FOnPercentDone write FOnPercentDone;
end;
|