Skip to content

Instantly share code, notes, and snippets.

@eberlitz
Created September 29, 2013 17:36
Show Gist options
  • Save eberlitz/6754661 to your computer and use it in GitHub Desktop.
Save eberlitz/6754661 to your computer and use it in GitHub Desktop.
MD_ML_TGA.md
[TOC]
Trabalho GA
===========
Preparação dos dados
----------------------
1. Junção dos arquivos **census-income.data** e **census-income.test** através do seguinte comando unix:
cat census-income.data census-income.test > census-income.all
2. Remoção de linhas exatamente iguais através de um script criado em javascript.
Total de linhas duplicadas encontradas: 6735
3. Inclusão de aspas para colunas que contenham espaços através de um código javascript para permitir a criação do arquivo ***.arff**.
4. Geração do arquivo ***.arff** via _Nodejs_ script
var fs = require('fs')
var removeDuplicates = function(lines){
console.log("Removind duplicated columns ...");
var nlines = {},
duplicates = 0;
for (var i = lines.length - 1; i >= 0; i--) {
if (!nlines[lines[i]]) {
nlines[lines[i]]=i;
}else{
duplicates++;
}
};
console.log("Removed "+duplicates+" duplicated lines\r\n");
var result = new Array();
for (var a in nlines){
if (a.length > 0) {
result.push(a);
};
}
return result;
};
var fileB = [
"@RELATION census",
"",
"@ATTRIBUTE Age numeric",
"@ATTRIBUTE ClassWorker string",
"@ATTRIBUTE IndustryRecode string",
"@ATTRIBUTE OccupationRecode string",
"@ATTRIBUTE Education string",
"@ATTRIBUTE WagePerHour numeric",
"@ATTRIBUTE EnrollInEduInstLastWk string",
"@ATTRIBUTE MaritalStat string",
"@ATTRIBUTE MajorIndustryCode string",
"@ATTRIBUTE MajorOccupationCode string",
"@ATTRIBUTE Race string",
"@ATTRIBUTE HispanicOrigin string",
"@ATTRIBUTE Sex string",
"@ATTRIBUTE MemberALaborUnion string",
"@ATTRIBUTE ReasonForUnemployment string",
"@ATTRIBUTE FullOrPartTimeEmploymentStat string",
"@ATTRIBUTE CapitalGains numeric",
"@ATTRIBUTE CapitalLosses numeric",
"@ATTRIBUTE DividendsFromStocks numeric",
"@ATTRIBUTE TaxFilerStat string",
"@ATTRIBUTE RegionPreviousResidence string",
"@ATTRIBUTE StatePreviousResidence string",
"@ATTRIBUTE HouseholdAndFamilyStat string",
"@ATTRIBUTE HouseholdSummaryInHousehold string",
"@ATTRIBUTE InstanceWeight numeric",
"@ATTRIBUTE MigrationCodechangeInMsa string",
"@ATTRIBUTE MigrationCodechangeInReg string",
"@ATTRIBUTE MigrationCodemoveWithinReg string",
"@ATTRIBUTE LiveInThisHouse1YearAgo string",
"@ATTRIBUTE MigrationPrevResInSunbelt string",
"@ATTRIBUTE NumPersonsWorkedForEmployer numeric",
"@ATTRIBUTE FamilyMembersUnder18 string",
"@ATTRIBUTE CountryBirthFather string",
"@ATTRIBUTE CountryBirthMother string",
"@ATTRIBUTE CountryBirthSelf string",
"@ATTRIBUTE Citizenship string",
"@ATTRIBUTE OwnBusinessOrSelfEmployed string",
"@ATTRIBUTE FillIncQuestionnaireForVeteransAdmin string",
"@ATTRIBUTE VeteransBenefits string",
"@ATTRIBUTE WeeksWorkedInYear numeric",
"@ATTRIBUTE Year string",
"@ATTRIBUTE class {'- 50000.','50000+.'}",
"",
"@DATA",
""
];
var insertQuotes = function (lines){
for (var i = lines.length - 1; i >= 0; i--) {
var columns = lines[i].split(',');
//console.log(columns.length);
for (var j = columns.length - 1; j >= 0; j--) {
var coluna = columns[j].trim();
if (coluna.indexOf(" ")!= -1) { // Should be quoted
coluna = coluna.replace("'","+");
columns[j] = "'" + coluna + "'";
};
};
lines[i] = columns.join();
};
};
fs.readFile('census-income.all', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
var lines = data.split(/\r?\n/);
lines = removeDuplicates(lines);
insertQuotes(lines);
var text = fileB.concat(lines).join("\r\n");
fs.writeFile("census-income.arff",text, function(err) {
if(err) {
console.log(err);
} else {
console.log("The file was saved!");
}
});
});
Notes
-----
- Segundo aos documentos incluidos junto com os dados o Atributo `InstanceWeight` deve ser ignorado para realizar classificação.
- Incluído o ultimo atributo como classe para identificar se ganha mais que 50k ou menos.
Especificações
---------------
- Utilização do classificador **`Naïve Bayes`** para avaliar o impacto do processo de limpeza dos dados e da seleção automática de atributos.
- Considerar como critério de avaliação do resultado o percentual de instancias corretamente e incorretamente classificadas mediante a configuração de experimentos 10-Fold Cross-Validation.
- Realizar o mesmo processo, ou seja, classificação com **`Naïve Bayes`** e avaliação do percentual de instancias corretamente e
incorretamente classificadas com o mesmo método de avaliação 10-Fold Cross-Valiadation, agora com o grupo escolhendo os 10
atributos que considera ser mais relevantes para separar as duas classes (pode ser empregada a seleção automática mas em
conjunto deve ser obrigatório o emprego da seleção manual). Tal seleção de atributos deve ser justificada e reportados os resultados obtidos.
Itens obrigatórios no relatório:
-------------------------------
- Identificação do relatório;
- Descrição do problema tratado e objetivo;
- Problema é separar os dados do census em classes que descrevam a renda de cada uma das pessoas definidas nos dados. Neste caso identificar se ganha mais ou menos que 50k.
- **Especificação dos dados**;
A descrição detalhada dos dados pode ser encontrada através do seguinte link:
http://www.census.gov/prod/techdoc/cps/cpsaug00.pdf
Para fazer uso desta descrição o seguinte mapeamento de colunas será necessário:
- **Age**: AAGE
- **ClassWorker**: ACLSWKR
- **IndustryRecode**: ADTIND
- **OccupationRecode**: ADTOCC
- **Education**: AHGA
- **WagePerHour**: AHRSPAY
- **EnrollInEduInstLastWk**: AHSCOL
- **MaritalStat**: AMARITL
- **MajorIndustryCode**: AMJIND
- **MajorOccupationCode**: AMJOCC
- **Race**: ARACE
- **HispanicOrigin**: AREORGN
- **Sex**: ASEX
- **MemberALaborUnion**: AUNMEM
- **ReasonForUnemployment**: AUNTYPE
- **FullOrPartTimeEmploymentStat**: AWKSTAT
- **CapitalGains**: CAPGAIN
- **CapitalLosses**: CAPLOSS
- **DividendsFromStocks**: DIVVAL
- **TaxFilerStat**: FEDTAX
- **RegionPreviousResidence**: GRINREG
- **StatePreviousResidence**: GRINST
- **HouseholdAndFamilyStat**: HHDFMX
- **HouseholdSummaryInHousehold**: HHDREL
- **InstanceWeight**: MARSUPWT
- **MigrationCodechangeInMsa**: MIGMTR1
- **MigrationCodechangeInReg**: MIGMTR3
- **MigrationCodemoveWithinReg**: MIGMTR4
- **LiveInThisHouse1YearAgo**: MIGSAME
- **MigrationPrevResInSunbelt**: MIGSUN
- **NumPersonsWorkedForEmployer**: NOEMP
- **FamilyMembersUnder18**: PARENT
- **CountryBirthFather**: PEFNTVTY
- **CountryBirthMother**: PEFNTVTY
- **CountryBirthSelf**: PEFNTVTY
- **Citizenship**: PRCITSHP
- **OwnBusinessOrSelfEmployed**: SEOTR
- **FillIncQuestionnaireForVeteransAdmin**: VETQVA
- **VeteransBenefits**: VETYN
- **WeeksWorkedInYear**: WKSWORK
- **Year**: Ano da pesquisa (94 ou 95)
- **class**: Se ganha mais ('50000+.') ou menos ('- 50000.') que 50 mil;
- Processo de limpeza dos dados, possíveis problemas encontrados e estratégias utilizadas para saná-los;
- Registros dúplicados
- Informações ausentes
- Possíveis normalizações e transformações aplicadas para poder minerá-los;
- Descrição da técnica automática para seleção empregadas, conforme slide anterior;/ Especificação da técnica de seleção automática **OneRAttributeEval** (evalUsingTrainingData = true)
- 20-30 linhas
- Qual o principio de funcionamento? Usar referencias para isso.
- Qual a formulação?
- Exemplo didático com poucas instancias
- Estratégia empregada pelo grupo para escolher os 10 atributos considerados mais relevantes para a separação das classes (manual ou automática+manual)
- Comparativo dos resultados obtidos para a aplicação do classificador designado para: os dados brutos, os dados selecionados de forma automática, e os dados selecionados de forma manual ou automática+manual.
- Apresentação de uma discussão dos resultados obtidos em função dos experimentos realizados e como o grupo acha que a seleção ajudou (ou atrapalhou) o resultado.
- Relato de críticas e problemas encontrados para a realização do trabalho.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment