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
|