Commit b18221c8 authored by Massih-Reza Amini's avatar Massih-Reza Amini
Browse files

message

parent 32f4375b
......@@ -91,20 +91,10 @@
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"208\n"
]
}
],
"source": [
"Train,Test=ConstTrainTest('sonar.txt',0.25)"
]
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
......
%% Cell type:markdown id: tags:
# Perceptron
%% Cell type:markdown id: tags:
Nous allons nous intéresser à l'algorithme du perceptron (Rosenblatt, 58) dont le pseudo-code est le suivant:
`input: Train, eta, m, MaxEp
init : w
epoque=0
err=1
while epoque<=MaxEp and err!=0
err=0
for i in 1:m
prendre le i-ième exemple (x,y) de Train
dp <- produit_scalaire(x,w)
if (dp <= 0)
w <- w + eta*y*x
err <- err+1
epoque <- epoque+1
output: w`
Le but étant de l'appliquer à quelques bases de la collection UCI (http://archive.ics.uci.edu/ml/index.php). En commençant par la base sonar qui constient 208 exemples en dimension 60 séparés par `,` et la dernière élément correspond à la classe de l'exemple.
Pour cela nous allons nous appuyer sur les fonctions suivantes:
* La fonction `ConstTrainTest` qui va télécharger la collection avec la fonction read_table de la librairie pandas (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_table.html), et crée une liste de listes qui contient chacune le vecteur représentatif d'un exemple en ajoutant sa classe en fin de la liste. En sortie, cette fonction retourne deux bases d'apprentissage et de test avec des proportions données:
%% Cell type:code id: tags:
``` python
import pandas as pd
import random
from sklearn.model_selection import train_test_split
def ConstTrainTest(filename,perTest):
tag_df=pd.read_table(filename,sep=',',header=None)
print(len(tag_df))
Dic={'R': -1, 'M': +1}
X=[]
for e in range(len(tag_df)):
x=list(tag_df.loc[e,:])
cls=x.pop()
x.insert(len(x),Dic[cls])
X.append(x)
random.shuffle(X)
x_train ,x_test = train_test_split(X,test_size=perTest)
return x_train,x_test
```
%% Cell type:markdown id: tags:
* La fonction `dotproduct` qui calcule le produit scalaire entre un exemple $\mathbf{x}=(x_1,\ldots,x_d)$ et le vecteur poids $\mathbf{w}=(w_0,w_1,\ldots,w_d)$: $\langle \mathbf{w},\mathbf{x} \rangle=w_0+\sum_{j=1}^d w_j x_j$
%% Cell type:code id: tags:
``` python
def dotproduct(x,w):
res=w[0]
for i in range(len(x)-1):
res+=w[i+1]*x[i]
return res
```
%% Cell type:markdown id: tags:
1. Appelez la fonction la fonction `ConstTrainTest` pour créer les bases d'apprentissage (Train) et de test (Test) avec une proportion 75% et 25%.
%% Cell type:code id: tags:
``` python
Train,Test=ConstTrainTest('sonar.txt',0.25)
```
%%%% Output: stream
208
%% Cell type:markdown id: tags:
* L'algorithtme du perceptron prend en entrée la base Train, le nombre maximum d'époques et un pas d'apprentissage eta et donne en sortie le vecteur poids et l'erreur commise à la dernière époque:
%% Cell type:code id: tags:
``` python
def perceptron(Train,MaxEpoch,eta):
W=[0.0 for i in range(len(Train[0]))]
epoch=0
err=1
d=len(Train[0])-1
E=[]
while (epoch<MaxEpoch and err!=0):
err=0
for x in Train:
dp=dotproduct(x,W)
if(x[d]*dp<=0):
err+=1
W[0]+=eta*x[d]
for i in range(d):
W[i+1]+=eta*x[d]*x[i]
E.append(err)
epoch+=1
return W,E
```
%% Cell type:markdown id: tags:
2. Tournez l'algorithme sur la base Train avec 1000 époques et un pas de eta=0.1
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
3. Modifiez le code pour avoir la liste des erreurs commises à chaque époque. On appelera cette liste E. Le but étant d'afficher les erreurs en s'aidant de la fonction suivante:
%% Cell type:code id: tags:
``` python
import matplotlib.pyplot as plt
def plotting(X,Y,strtitle,strxlabel,strylabel):
plt.plot(X, Y)
plt.yscale('linear')
plt.title(strtitle)
plt.xlabel(strxlabel)
plt.ylabel(strylabel)
plt.grid(True)
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
4. Téléchargez les bases https://archive.ics.uci.edu/ml/datasets/spambase, https://archive.ics.uci.edu/ml/datasets/heart+Disease, https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Original%29, https://archive.ics.uci.edu/ml/datasets/Ionosphere et reportez dans le tableau ci-dessous les erreurs du modèles sur les bases tests (on gardera les mêmes paramètres qu'avant)
| Collection | Perceptron |
|------------|------------|
| Breast | |
| Ionosphere | |
| Heart | |
| Sonar | |
| Spam | |
%% Cell type:code id: tags:
``` python
```
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment