######################################
# Chargement des donnees de spambase #
######################################
X=read.table('spambase.data',sep=",");
dim(X)
X=as.matrix(X)
is(X)
# verification des variables
word_freq_WORD = X[,1:48]
char_freq_CHAR = X[,49:54]
capital_run_length_average=X[,55]
capital_run_length_longest=X[,56]
capital_run_length_total =X[,57]
spam=X[,58]
summary(spam)
mean(spam)
sd(spam)
100*sd(spam)/mean(spam)
######################################
# Separation entrainement/test #
######################################
#67% entrainement, 33% test
ind=sample(nrow(X),0.67*nrow(X));
xtrain=X[ind,1:57];
ytrain=X[ind,58];
xtest=X[-ind,1:57];
ytest=X[-ind,58];
######################################
# Régression linéaire #
######################################
training_data <- list(x=xtrain, y=ytrain);
testing_data <- list(x=xtest);
linearmodel = lm(y ~ x, training_data);
#prediction (arrondie) sur la base de test
ypred = round(predict(linearmodel,testing_data));
test_error = (mean( (ypred-ytest)^2))
train_error = mean( (linearmodel$fitted-ytrain)^2)
#R-squared
summary(linearmodel)
# affichage des erreurs d'entrainement et de test
test_error
train_error
######################################
# Matrice de confusion #
######################################
#P:total positifs, N: total négatifs (predits)
#y:total positifs, no: total négatifs (base de test)
N=length(ypred)-sum(ypred)
P=length(ypred)-N
no=length(ytest)-sum(ytest)
y=length(ytest)-no
#taux de faux-positifs (marqué 1 alors que 0)
tmp=(ypred-ytest)
for (i in 1:length(tmp))
{
if(tmp[i]<0) tmp[i]=0
}
fauxpos=sum(tmp)/no
#taux de vrais-positifs (marqué correctement 1)
res=0
for (i in 1:length(ypred))
{
if(ypred[i]==1 && ytest[i]==1) res=res+1
}
vraipos=res/y
#taux de faux-négatifs (marqué 0 alors que 1)
tmp2=(ypred-ytest)
for (i in 1:length(tmp2))
{
if(tmp2[i]>0) tmp2[i]=0
}
fauxneg=sum(abs(tmp2))/y
#taux de vrais-negatifs (marqué correctement 0)
res2=0
for (i in 1:length(ypred))
{
if(ypred[i]==0 && ytest[i]==0) res2=res2+1
}
vraineg=res2/no
vraipos; fauxneg
fauxpos;vraineg