294 lines
7.3 KiB
PHP
Executable File
294 lines
7.3 KiB
PHP
Executable File
<?php
|
|
|
|
// Este script seleciona amostras representativas de treino e de teste de cada cluster gerado
|
|
|
|
|
|
function gerartreinoteste($nqt, $cl, $dircluster, $fsel, $fttr, $ftte, $fr, $fr2)
|
|
{
|
|
|
|
$linksubmissoes="http://lcad.inf.ufes.br/soap/submissoes/$nqt";
|
|
|
|
// Carregar rotulos do cluster
|
|
|
|
$lb=file($dircluster."labels.txt");
|
|
|
|
if ($cl<>"rd") // Se cluster tiver mais de um elemento
|
|
{
|
|
|
|
// Carregar matriz de indexação
|
|
$m= file($dircluster."matrizreduzida.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 e no teste
|
|
fwrite($ftr, str_replace(' ', ';', $m[0]));
|
|
fwrite($fltr, $lb[0]);
|
|
$guarda=trim($lb[0]);
|
|
fwrite($fttr, $guarda.";".$cl."\n");
|
|
fwrite($fr, $guarda.";-1;X <a href=$linksubmissoes/$guarda/arquivosaida>Ver Saida Gerada</a>"."\n");
|
|
fwrite($fr2, $guarda."\n");
|
|
fwrite($fte, str_replace(' ', ';', $m[1]));
|
|
fwrite($flte, $lb[1]);
|
|
$guarda=trim($lb[1]);
|
|
fwrite($ftte,$guarda .";".$cl."\n");
|
|
fwrite($fr, $guarda.";-1; <a href=$linksubmissoes/$guarda/arquivosaida>Ver Saida Gerada</a>"."\n");
|
|
|
|
}
|
|
else
|
|
{
|
|
fwrite($ftr, str_replace(' ', ';', $m[1]));
|
|
fwrite($fltr, $lb[1]);
|
|
$guarda=trim($lb[1]);
|
|
fwrite($fttr, $guarda.";".$cl."\n");
|
|
$ql=$guarda.";-1; X <a href=$linksubmissoes/".$guarda."/arquivosaida>Ver Saida Gerada</a>"."\n";
|
|
fwrite($fr,$ql);
|
|
fwrite($fr2, $guarda."\n");
|
|
fwrite($fte, str_replace(' ', ';', $m[0]));
|
|
fwrite($flte, $lb[0]);
|
|
$guarda=trim($lb[0]);
|
|
fwrite($ftte,$guarda.";".$cl."\n");
|
|
|
|
fwrite($fr, $guarda.";-1; <a href=$linksubmissoes/".$guarda."/arquivosaida>Ver Saida Gerada</a>"."\n");
|
|
}
|
|
|
|
unset($v1);
|
|
unset($v2);
|
|
|
|
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
// Número de amostras sorteadas
|
|
|
|
$nt=round($razao*$ni);
|
|
|
|
// Obtém os índices da matriz
|
|
|
|
$vindices= array_keys($m);
|
|
|
|
|
|
|
|
// Grava o treino
|
|
|
|
for($k=0;$k<$nt;$k++)
|
|
{
|
|
|
|
// Sorteia valor um item da matriz
|
|
$vs = array_rand($vindices, 1);
|
|
$indv=$vindices[$vs];
|
|
$linha= str_replace(' ', ';', $m[$indv]);
|
|
$codigo=$lb[$indv];
|
|
|
|
// Grava em arquivos de treino
|
|
|
|
fwrite($ftr, $linha);
|
|
fwrite($fltr, $codigo);
|
|
$guarda=trim($codigo);
|
|
fwrite($fttr, $guarda.";".$cl."\n");
|
|
fwrite($fr, $guarda.";-1; X <a href=$linksubmissoes/".$guarda."/arquivosaida>Ver Saida Gerada</a>"."\n");
|
|
fwrite($fr2, $guarda."\n");
|
|
unset($vindices[$vs]);
|
|
$vindices=array_values($vindices);
|
|
|
|
}
|
|
|
|
// O que sobrou em $vindices grava como teste
|
|
|
|
$novotam = count($vindices);
|
|
for($contind = 0; $contind < $novotam ; $contind++)
|
|
{
|
|
$iteste = $vindices[$contind];
|
|
fwrite($fte, $m[$iteste]);
|
|
fwrite($flte, $lb[$iteste]);
|
|
$guarda = trim($lb[$iteste]);
|
|
fwrite($ftte,$guarda.";".$cl."\n");
|
|
fwrite($fr, $guarda.";-1; <a href=$linksubmissoes/$guarda/arquivosaida>Ver Saida Gerada</a>"."\n");
|
|
|
|
}
|
|
|
|
unset($vindices);
|
|
}
|
|
|
|
|
|
|
|
// Descarrega matriz
|
|
unset($m);
|
|
|
|
// Fecha arquivos abertos
|
|
|
|
fclose($ftr);
|
|
fclose($fte);
|
|
fclose($fltr);
|
|
fclose($flte);
|
|
|
|
}
|
|
else // Cluster com um só elemento (outlier)
|
|
{
|
|
$tam = count($lb);
|
|
|
|
for($i=0;$i<$tam;$i++)
|
|
{
|
|
$parte= explode(";", $lb[$i]);
|
|
$guarda = trim($parte[0]);
|
|
|
|
// Grava para o professor pontuar, mas não vai para o treino, já que é outlier
|
|
|
|
fwrite($fr, $guarda.";-1; X <a href=$linksubmissoes/".$guarda."/arquivosaida>Ver Saida Gerada</a>"."\n");
|
|
|
|
unset($parte);
|
|
}
|
|
}
|
|
|
|
// Descarrega matriz e seus rotulos
|
|
|
|
|
|
unset($lb);
|
|
|
|
} // Fim da função
|
|
|
|
// Início do programa
|
|
|
|
$diretorioentrada = "indexados/";
|
|
$diretoriopredicao = "arquivospredicao/";
|
|
|
|
$fracaoselecao = file("arquivosselecao/fracaoselecao.csv");
|
|
|
|
$minimo = 3; // Se o professor pontuou pelo menos 3 amostras, ele já iniciou processo.
|
|
|
|
$ponteiro1 = opendir($diretorioentrada);
|
|
|
|
|
|
// Para cada subdiretorio do diretorio de entrada
|
|
|
|
while (($nomequestao = readdir($ponteiro1)))
|
|
{
|
|
|
|
if (($nomequestao<>".") && ($nomequestao<>".."))
|
|
{
|
|
// Se existe notastreino.csv e o professor corrigiu menos de 10% da base,
|
|
// isto é, 90% das amostras estão em pontuadas em -1, podemos atualizar treino e teste
|
|
|
|
|
|
|
|
$diretorioquestao= $diretorioentrada.$nomequestao."/";
|
|
$diretorioclusters= $diretorioquestao."clusters/";
|
|
|
|
if (file_exists($diretorioclusters))
|
|
{
|
|
|
|
|
|
|
|
// Arquivo com todos os rótulos de treino e com o número do cluster
|
|
|
|
$ltreino = $diretorioquestao."ltreino.csv";
|
|
$lteste = $diretorioquestao."lteste.csv";
|
|
$lresultado=$diretorioquestao."resultado.csv";
|
|
$lresultado2=$diretorioquestao."/professordevepontuar.csv";
|
|
$frotulostreino= fopen($ltreino,'w');
|
|
$frotulosteste= fopen($lteste,'w');
|
|
$frotulosresultado= fopen($lresultado,'w');
|
|
$frotulosresultado2= fopen($lresultado2,'w');
|
|
|
|
|
|
|
|
|
|
$ponteiro2 = opendir($diretorioclusters);
|
|
|
|
|
|
// Para cada subdiretorio do diretorio clusters
|
|
|
|
while (($nomecluster = readdir($ponteiro2)))
|
|
{
|
|
|
|
if (($nomecluster<>".") && ($nomecluster<>"..") )
|
|
{
|
|
|
|
|
|
$enderecocluster= $diretorioclusters.$nomecluster."/";
|
|
gerartreinoteste($nomequestao, $nomecluster, $enderecocluster, $fracaoselecao, $frotulostreino, $frotulosteste, $frotulosresultado, $frotulosresultado2);
|
|
|
|
}
|
|
}
|
|
|
|
fclose($frotulostreino);
|
|
fclose($frotulosteste);
|
|
fclose($frotulosresultado);
|
|
fclose($frotulosresultado2);
|
|
|
|
|
|
|
|
|
|
} // FIm do If ==> se existem clusters
|
|
} // Fim do If
|
|
} // Fim do While
|
|
|
|
unset($fracaoselecao);
|
|
|
|
?>
|
|
|
|
|
|
|
|
|
|
|