Une présentation de : Olivier Poirion
new_comment = "c'est vraiment naze"
if new_comment.count('naze'):
status = "bad"
elif new_comment.count('bien'):
status = "good"
...
if new_comment.count('super') and not comment.count('pas super'):
status = "good"
...
def supervized_analysis():
""" building a classifier """
used_classifier = Classifier()
trainingdata = process(rawdata)
used_classifier.feed_with(trainingdata)
score = used_classifier.evalutation()
used_classifier.predict("c'est un super commentaire positif")
dictionnary = process_one_comment("super ce blog! J'adore ce truc")
### looking inside dictionnary ###
{
"super": 1,
"blog": 1,
"ce": 2,
"adore":1,
"truc":1
}
### processing all rawdata ###
pre_trainingdata = [process(rawdata) for raw in rawdata]
vector, index = vectorize_one(dictionnary)
### looking inside vector ###
(1, 1, 2, 1, 1)
### looking inside index ###
{
"super": 0,
"blog": 1,
"ce": 2,
"adore":3,
"truc":4
}
problème, on doit vectoriser dictionnary par rapport à rawdata
vector, index = vectorize(dictionnary, rawdata)
### looking inside vector ###
(1, 1, 2, 1, 1, 0,...,0)
### looking inside index ###
{
"super": 0,
...
"naze":27
}
training data final
trainingdata = vectorize_all_dictionnary(dictionnary)
status = ["good", "good", "good", "bad", "bad", "bad"]
used_classifier = KNearestNeighbors(k=1, distance="Jaccard")
used_classifier.feed_with(trainingdata)
used_classifier.predict("c'est un super commentaire positif")
Entrainement
trainingdata = trainingdata
status = status
nb_neighbors = k
""" do nothing, keep into memory trainingdata as matrix """
Prédiction
new_comment = "c'est un super commentaire positif"
new_vector, index = vectorize(new_comment, rawdata)
results = set()
for vector, state in zip(trainindata, status):
score = compute_distance(new_vector, vector)
results.add((score, state))
order_by_best_score(results)
results = results[0:nb_neighbors] #take k best scores
result = most_represented_status(results) # "good" or "bad"
en python:
union = len(set(dict1.keys()).union(dict2.keys()));
intersection = len(set(dict1.keys()).intersection(dict2.keys()));
d_jaccard = 1.0 - float(union) / intersection
“c'est un super commentaire positif”
![]() | super ce blog! J'adore ce truc... | 0.85 |
---|---|---|
![]() | De la balle! c'est vraiment super! | 0.71 |
![]() | que des bonnes choses, bien fait et très intéressant | 1.0 |
![]() | pas terrible c'est vraiment un blog de gros naze... | 0.80 |
![]() | On se fout de ma geule! remboursez!!! c'est naze! | 0.90 |
![]() | pas super ce blog, peut mieux faire je n'y reviendrai pas | 0.90 |
“pas super”
![]() | super ce blog! J'adore ce truc... | 0.83 |
---|---|---|
![]() | De la balle! c'est vraiment super! | 0.86 |
![]() | que des bonnes choses, bien fait et très intéressant | 1.0 |
![]() | pas terrible c'est vraiment un blog de gros naze... | 0.90 |
![]() | On se fout de ma geule! remboursez!!! c'est naze! | 1.0 |
![]() | pas super ce blog, peut mieux faire je n'y reviendrai pas | 0.88 |
{
"super": 1,
"super ce": 1,
"super ce blog": 1,
}
{
"sup": 1,
"supe": 1,
"super": 1,
"super!":1,
}
{
"!": 2,
("!", -1): 1,
("super", 0): 1
}
{
"super ce": 1,
"!": 1,
"super": 1,
("super", 0): 1,
}
Scoring de la pertinence d'un attribut:
“pas super”
![]() | super ce blog! J'adore ce truc... | 0.92 |
---|---|---|
![]() | De la balle! c'est vraiment super! | 0.92 |
![]() | que des bonnes choses, bien fait et très intéressant | 1.0 |
![]() | pas terrible c'est vraiment un blog de gros naze... | 0.95 |
![]() | On se fout de ma geule! remboursez!!! c'est naze! | 1.0 |
![]() | pas super ce blog, peut mieux faire je n'y reviendrai pas | 0.89 |
“pas super”
![]() | super ce blog! J'adore ce truc... | 0.90 |
---|---|---|
![]() | De la balle! c'est vraiment super! | 0.88 |
![]() | que des bonnes choses, bien fait et très intéressant | 1.0 |
![]() | pas terrible c'est vraiment un blog de gros naze... | 0.96 |
![]() | On se fout de ma geule! remboursez!!! c'est naze! | 0.99 |
![]() | pas super ce blog, peut mieux faire je n'y reviendrai pas | 0.89 |
faible k: spécificité
fort k: généralisation
Score du training-set
Cross-validation
Test set
Méthodes propre à l'algo utilisé
présence de patterns spécifiques et évidents entre les deux classes
Confrontation a des données bruitées
|
|
---|
![]() | Fames vitae |
---|---|
![]() | 'Augue magna a sociis consequat dui sed sit est ve donec nulla per eget |
![]() | Donex viate gravida |
![]() | Velit dolor nullam sociis suscipit parturient aliquam |
![]() | Lorem velit |
![]() | Magna nulla dui non sed ad mattis dapibus ut mi |
Aucun pattern!
Surestimation du vrai score (Mauvaise méthode d'évaluation)
modèle 1-nn trop spécifique ( overfitting )
Existe-t-il quelque chose à apprendre?
\[modèle = \{algorithme, vectorisation\}\]
\[succès = f(donnés, modèle, paramètres) \]
Considérations techniques de l'algorithme
Machine-learning <=> science
(mais pas de raison d'avoir peur!)
Clés théoriques
|
Algorithmes
|