269 lines
6.1 KiB
PHP
Executable File
269 lines
6.1 KiB
PHP
Executable File
<?php
|
|
|
|
// Este script seleciona amostras representativas de treino e de teste de cada cluster gerado
|
|
|
|
|
|
function gerartreinoteste($cl, $dircluster, $fsel, $fttr, $ftte)
|
|
{
|
|
|
|
|
|
// Carregar matriz de indexação e seus rotulos
|
|
|
|
$m= file($dircluster."matrizreduzida.txt");
|
|
$lb=file($dircluster."labels.txt");
|
|
|
|
$primeiralinha = $m[0];
|
|
|
|
// Normalizar os índices
|
|
|
|
unset($m[0]);
|
|
|
|
$m=array_values($m);
|
|
|
|
// Número de padrões da matriz
|
|
|
|
$ni=count($m);
|
|
|
|
// Abrir arquivos de treino/teste, de rótulos de treino/teste e gravar primeira linha
|
|
|
|
$arqtr=$dircluster."treino.csv";
|
|
$arqte=$dircluster."teste.csv";
|
|
$arqltr=$dircluster."ltreino.csv";
|
|
$arqlte=$dircluster."lteste.csv";
|
|
|
|
$ftr= fopen($arqtr,'w');
|
|
$fte= fopen($arqte,'w');
|
|
$fltr= fopen($arqltr,'w');
|
|
$flte= fopen($arqlte,'w');
|
|
|
|
fwrite($ftr, $primeiralinha);
|
|
fwrite($fte, $primeiralinha);
|
|
|
|
// Obter fracao de selecao
|
|
|
|
$fracao= explode("/", $fsel[0]);
|
|
|
|
$num = trim($fracao[0]);
|
|
$den = trim($fracao[1]);
|
|
|
|
if ($den!=0)
|
|
{
|
|
$razao = ($num/$den);
|
|
}
|
|
else
|
|
{
|
|
$razao=0;
|
|
}
|
|
|
|
unset($fracao);
|
|
|
|
|
|
// Se cluster conter duas amostras, selecione a que tiver menos instruções como treino
|
|
|
|
if ($ni==2)
|
|
{
|
|
$v1=explode(" ", trim($m[0]));
|
|
$v2=explode(" ", trim($m[1]));
|
|
$s1=array_sum($v1);
|
|
$s2=array_sum($v2);
|
|
|
|
// Grava treino/teste e seus rotulos
|
|
|
|
if ($s1<$s2)
|
|
{
|
|
// Grava no treino
|
|
fwrite($ftr, str_replace(' ', ';', $m[0]));
|
|
fwrite($fltr, $lb[0]);
|
|
fwrite($fttr, trim($lb[0]).";".$cl."\n");
|
|
fwrite($fte, str_replace(' ', ';', $m[1]));
|
|
fwrite($flte, $lb[1]);
|
|
fwrite($ftte, trim($lb[1]).";".$cl."\n");
|
|
}
|
|
else
|
|
{
|
|
fwrite($ftr, str_replace(' ', ';', $m[1]));
|
|
fwrite($fltr, $lb[1]);
|
|
fwrite($fttr, trim($lb[1]).";".$cl."\n");
|
|
fwrite($fte, str_replace(' ', ';', $m[0]));
|
|
fwrite($flte, $lb[0]);
|
|
fwrite($ftte, trim($lb[0]).";".$cl."\n");
|
|
}
|
|
|
|
unset($v1);
|
|
unset($v2);
|
|
|
|
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
// Obter nt= numero de amostras de treino
|
|
|
|
if ($ni==3 || $ni==4)
|
|
{
|
|
|
|
$nt = 2;
|
|
}
|
|
else
|
|
{
|
|
// Se o cluster tiver mais de três amostras seleciona uma fracao de amostras de treino
|
|
|
|
$nt=round($razao*$ni);
|
|
|
|
|
|
}
|
|
|
|
|
|
// Obtém os índices da matriz
|
|
|
|
$vindices= array_keys($m);
|
|
|
|
// Calcular a soma de caracteristicas de cada padrão e armazena em vetor
|
|
|
|
$soma=array();
|
|
$maior=0;
|
|
|
|
for($k=0;$k<$ni;$k++)
|
|
{
|
|
$linha= trim($m[$k]);
|
|
$vet = explode(" ", $linha);
|
|
$soma[$k]= array_sum($vet);
|
|
|
|
|
|
unset($vet);
|
|
|
|
}
|
|
$maior = max($soma);
|
|
$menor = min($soma);
|
|
$imenor = array_search($menor, $soma);
|
|
$imaior = array_search($maior, $soma);
|
|
$ns = count($soma);
|
|
$ss = array_sum($soma);
|
|
if ($ns!=0)
|
|
{
|
|
$media = $ss/$ns;
|
|
}
|
|
else
|
|
{
|
|
$media=0;
|
|
}
|
|
//-------------------------------------------------------------------------------------------
|
|
|
|
|
|
//------------------------------------------------------------------------------------------
|
|
// Grava no treino o padrão com menor e maior soma e com valor médio
|
|
|
|
fwrite($ftr, $m[$imenor]);
|
|
fwrite($ftr, $m[$imaior]);
|
|
fwrite($fltr, $lb[$imenor]);
|
|
fwrite($fltr, $lb[$imaior]);
|
|
fwrite($ftr, $m[$imedia]);
|
|
fwrite($fltr, $lb[$imedia]);
|
|
|
|
unset($soma[$imaior]);
|
|
unset($soma[$imenor]);
|
|
unset($soma[$imedia]);
|
|
|
|
|
|
$vindices=array_values($vindices);
|
|
|
|
|
|
|
|
unset($soma);
|
|
// O que sobrou em $vindices grava como teste
|
|
foreach($vindices as $iteste)
|
|
{
|
|
fwrite($fte, $m[$iteste]);
|
|
fwrite($flte, $lb[$iteste]);
|
|
fwrite($ftte, trim($lb[$iteste]).";".$cl."\n");
|
|
|
|
}
|
|
|
|
unset($vindices);
|
|
}
|
|
|
|
|
|
|
|
|
|
// Descarrega matriz e seus rotulos
|
|
|
|
unset($m);
|
|
unset($lb);
|
|
|
|
// Fecha arquivos abertos
|
|
|
|
fclose($ftr);
|
|
fclose($fte);
|
|
fclose($fltr);
|
|
fclose($flte);
|
|
|
|
|
|
|
|
} // Fim da função
|
|
|
|
// Início do programa
|
|
|
|
$diretorioentrada = "indexados/";
|
|
|
|
$fracaoselecao = file("arquivosselecao/fracaoselecao2.csv");
|
|
|
|
$ponteiro1 = opendir($diretorioentrada);
|
|
|
|
|
|
// Para cada subdiretorio do diretorio de entrada
|
|
|
|
while (($nomequestao = readdir($ponteiro1)))
|
|
{
|
|
|
|
if (($nomequestao<>".") && ($nomequestao<>".."))
|
|
{
|
|
|
|
$diretorioquestao= $diretorioentrada.$nomequestao."/";
|
|
$diretorioclusters= $diretorioquestao."clusters/";
|
|
|
|
|
|
// Arquivo com todos os rótulos de treino e com o número do cluster
|
|
|
|
$ltreino = $diretorioquestao."ltreino.csv";
|
|
$lteste = $diretorioquestao."lteste.csv";
|
|
|
|
$frotulostreino= fopen($ltreino,'w');
|
|
$frotulosteste= fopen($lteste,'w');
|
|
|
|
// Arquivo com todos os rótulos de teste e com o número do cluster
|
|
|
|
// Arquivo com fracao de selecao
|
|
|
|
|
|
|
|
|
|
$ponteiro2 = opendir($diretorioclusters);
|
|
|
|
|
|
// Para cada subdiretorio do diretorio clusters
|
|
|
|
while (($nomecluster = readdir($ponteiro2)))
|
|
{
|
|
|
|
if (($nomecluster<>".") && ($nomecluster<>"..") && ($nomecluster<>"rd"))
|
|
{
|
|
$enderecocluster= $diretorioclusters.$nomecluster."/";
|
|
gerartreinoteste($nomecluster, $enderecocluster, $fracaoselecao, $frotulostreino, $frotulosteste);
|
|
}
|
|
}
|
|
|
|
fclose($frotulostreino);
|
|
fclose($frotulosteste);
|
|
|
|
}
|
|
}
|
|
|
|
unset($fracaoselecao);
|
|
|
|
?>
|
|
|
|
|
|
|
|
|