Algorithm-TrunkClassifier
view release on metacpan or search on metacpan
lib/Algorithm/TrunkClassifier/DataWrapper.pm view on Meta::CPAN
my $self = shift(@_);
return $self->{"class_one"};
}
#Description: Returns the name of class two
#Parameters: (1) TrunkClassifier::DataWrapper object
#Return value: Class name
sub getClassTwoName($){
my $self = shift(@_);
return $self->{"class_two"};
}
#Description: Returns a copy of a TrunkClassifier::DataWrapper object
#Parameters: (1) TrunkClassifier::DataWrapper object
#Return value: New TrunkClassifier::DataWrapper object
sub copy($){
my $self = shift(@_);
my $newWrapper = Algorithm::TrunkClassifier::DataWrapper->new();
my @colnames = @{$self->{"colnames"}};
my @rownames = @{$self->{"rownames"}};
my @classVector = @{$self->{"class_vector"}};
my @dataMatrix;
foreach my $arrayRef (@{$self->{"data_matrix"}}){
my @arrayCopy = @{$arrayRef};
push(@dataMatrix, \@arrayCopy);
}
$newWrapper->{"colnames"} = \@colnames;
$newWrapper->{"rownames"} = \@rownames;
$newWrapper->{"data_matrix"} = \@dataMatrix;
$newWrapper->{"class_vector"} = \@classVector;
$newWrapper->{"class_one"} = $self->{"class_one"};
$newWrapper->{"class_two"} = $self->{"class_two"};
return $newWrapper;
}
#Description: Removes one sample from a TrunkClassifier::DataWrapper object
#Parameters: (1) TrunkClassifier::DataWrapper object, (2) index of sample to remove
#Return value: TrunkClassifier::DataWrapper object containing the removed sample
sub leaveOneOut($ $){
my ($self, $index) = @_;
my @colnames = ($self->{"colnames"}[$index]);
my @rownames = @{$self->{"rownames"}};
my @classVector = ($self->{"class_vector"}[$index]);
my @matrixCol;
for(my $row = 0; $row < scalar(@rownames); $row++){
my @colArray = splice(@{$self->{"data_matrix"}[$row]}, $index, 1);
push(@matrixCol, \@colArray);
}
splice(@{$self->{"colnames"}}, $index, 1);
splice(@{$self->{"class_vector"}}, $index, 1);
my $newWrapper = Algorithm::TrunkClassifier::DataWrapper->new();
$newWrapper->{"colnames"} = \@colnames;
$newWrapper->{"rownames"} = \@rownames;
$newWrapper->{"data_matrix"} = \@matrixCol;
$newWrapper->{"class_vector"} = \@classVector;
$newWrapper->{"class_one"} = $self->{"class_one"};
$newWrapper->{"class_two"} = $self->{"class_two"};
return $newWrapper;
}
#Description: Removes a percentage of samples from a TrunkClassifier::DataWrapper object
#Parameters: (1) TrunkClassifier::DataWrapper object, (2) split percent
#Return value: TrunkClassifier::DataWrapper object containing the removed samples
sub splitSamples($ $){
my ($self, $split) = @_;
my $totNumSamples = $self->getNumSamples();
my $testSetSize = floor(($split / 100) * $totNumSamples);
my @colnames;
my @rownames = $self->getProbeList();
my @classVector;
my @matrix;
for(my $row = 0; $row < $self->getNumProbes(); $row++){
my @array;
push(@matrix, \@array);
}
for(my $testIndex = 0; $testIndex < $testSetSize; $testIndex++){
my $randIndex = int(rand($self->getNumSamples()));
my $colname = splice(@{$self->{"colnames"}}, $randIndex, 1);
push(@colnames, $colname);
my $class = splice(@{$self->{"class_vector"}}, $randIndex, 1);
push(@classVector, $class);
for(my $row = 0; $row < $self->getNumProbes(); $row++){
my $value = splice(@{$self->{"data_matrix"}[$row]}, $randIndex, 1);
push(@{$matrix[$row]}, $value);
}
}
my $testSet = Algorithm::TrunkClassifier::DataWrapper->new();
$testSet->{"colnames"} = \@colnames;
$testSet->{"rownames"} = \@rownames;
$testSet->{"data_matrix"} = \@matrix;
$testSet->{"class_vector"} = \@classVector;
$testSet->{"class_one"} = $self->{"class_one"};
$testSet->{"class_two"} = $self->{"class_two"};
return $testSet;
}
#Description: Returns the number of samples in the specified class
#Parameters: (1) TrunkClassifier::DataWrapper object, (2) class
#Return value: Array with column indexes
sub getClassSize($ $){
my ($self, $class) = @_;
my $classSize = 0;
foreach my $sampleClass (@{$self->{"class_vector"}}){
if($sampleClass eq $class){
$classSize++;
}
}
return $classSize;
}
#Description: Returns the probe name of the probe row index given as argument
#Parameters: (1) TrunkClassifier::DataWrapper object, (2) probe row index
#Return value: Probe name
sub getProbeName($ $){
my ($self, $probeIndex) = @_;
return ${$self->{"rownames"}}[$probeIndex];
}
#Description: Returns the probe row index of the probe name given as argument
#Parameters: (1) TrunkClassifier::DataWrapper object, (2) probe name
#Return value: Probe row index
sub getProbeIndex($ $){
( run in 3.577 seconds using v1.01-cache-2.11-cpan-98e64b0badf )