#!/usr/local/bin/perl
# -*-Perl-*-
# weather.perl -- Tom Fawcett Tue Jan 2 1996
#
# Description:
#
# Simple test/demo program for Statistics/LTU.pm.
#
# Example set is a very simple illustration domain taken from
# Quinlan's article on decision trees:
#
# @ARTICLE{Quinlan86,
# author = "J.R. Quinlan",
# year = "1986",
# title = "Induction of Decision Trees",
# journal = "Machine Learning",
# volume = "1",
# pages = "81--106",
# publisher = "Kluwer Academic Publishers, Boston"
# }
#
require 5;
use Statistics::LTU;
print "LTU version is $Statistics::LTU::VERSION\n";
print "\$LTU_PLUS = $LTU_PLUS, \$LTU_MINUS = $LTU_MINUS\n";
# Individual features to be used
@Features = ("sunny", "overcast", "rain",# clouds
"hot", "mild", "cool", # temperature
"humid", "normal", "dry", # humidity
"windy", "calm" # wind
);
$N_FEATURES = $#Features + 1;
# The raw examples, taken from Quinlan's paper.
# Note that for simplicity we just represent the features
# as a string.
@Quinlan_Examples = (
["sunny hot humid calm", "n"],
["sunny hot humid windy","n"],
["overcast hot humid calm", "y"],
["rain mild humid calm", "y"],
["rain cool normal calm", "y"],
["rain cool normal windy","n"],
["overcast cool normal windy","y"],
["sunny mild humid calm", "n"],
["sunny cool normal calm", "y"],
["rain mild normal calm", "y"],
["sunny mild normal windy","y"],
["overcast mild humid windy","y"],
["overcast hot normal calm", "y"],
["rain mild humid windy","y"]
);
# Create the example set. Format of @Examples is
# ( [[...feature vector...], class], [[...feature vector...], class], ...)
#
@Examples = ();
foreach $example (@Quinlan_Examples) {
($feature_string, $class) = @{$example};
@Values = (0) x $N_FEATURES;
for $i (0 .. $#Features) {
$feature = $Features[$i];
$Values[$i] = 1 if $feature_string =~ /$feature/i;
}
push(@Examples, [\@Values,
($class eq "y" ? $LTU_PLUS : $LTU_MINUS)]
);
}
# Create the LTU. Enable automatic feature scaling.
$ltu = new Statistics::LTU::ACR($N_FEATURES, 1);
# This is the main loop that trains and tests the LTU.
for $iter (1 .. 10) {
# Train the LTU
for $example (@Examples) {
($features_ref, $class) = @{$example};
$ltu->train($features_ref, $class);
}
# Test the LTU. We really don't need to do this separately from
# the eval_on_set since we could figure out accuracy from the
# stats eval_on_set returns.
#
$correct = 0;
for $example (@Examples) {
($features_ref, $class) = @{$example};
if ($ltu->correctly_classifies($features_ref, $class)) {
$correct++;
}
}
($TN, $FP, $FN, $TP) = $ltu->eval_on_set(\@Examples);
print "\nIteration $iter. LTU accuracy is ";
print $correct / ($#Examples + 1), "\n";
print "True negs=$TN, False pos=$FP, False negs=$FN, True pos=$TP\n";
$ltu->print;
}
##### End of weather.perl
syntax highlighted by Code2HTML, v. 0.9.1