Python Integrated Learning: Writing and Constructing adaboost Classification Model Visualized decision Boundary and sklearn package Calling Comparison

Petit assistant d'extension 2021-11-25 10:43:52
python integrated learning writing constructing


AdaBoost- Oui.?

BoostingSe réfère à la série de méta - algorithmes d'apprentissage automatique,Ce sera beaucoup "Faible "La sortie du classificateur est fusionnée en un puissant "Ensemble",Le taux d'erreur individuel de chacun de ces classificateurs faibles ne peut être qu'un peu meilleur que la supposition aléatoire.

AdaBoostCe nom représente l'Ascension adaptative,Il s'agit d'un algorithme de levage spécial,Dans cet algorithme,On s'adapte à une série de "La souche"(Arbre de décision avec un noeud et deux feuilles),Et pondéré leur vote final en fonction de l'exactitude de leurs prévisions.Après chaque itération,Nous avons pondéré les ensembles de données,Accorder une plus grande attention aux points de données qui ont été mal classés par le précédent apprenant faible,Voilà.,Ces points de données sont itératifst+1Pendant ce temps "Attention particulière".

 

Comment ça se compare à une forêt aléatoire?

Caractéristiques

Forêt aléatoire

AdaBoost

Profondeur

Infini(Un arbre entier)

La souche(Avec 2 Noeud unique de feuilles)

Croissance des arbres

Indépendance

À tour de rôle

Vote

Même chose.

Pondération

AdaBoost Algorithmes

A) Le poids de l'échantillon d'initialisation uniforme est PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Visualisation.

B) Pour chaque itération t:

  1. Trouver​​ht(x)​​ Apprentissage faible minimisé Appareil PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Visualisation_02.
  2. Nous avons pondéré les apprenants faibles en fonction de leur précision: PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Visualisation_03
  3. Augmenter le poids de l'observation de la classification des erreurs: PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Python_04.
  4. Poids normalisé,De faire PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Visualisation_05.

C)Vote à la majorité pondérée pour la prévision finale en tant que prévision faible de l'apprenant: PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_AdaBoost_06.

Dessin

Nous utiliserons les fonctions suivantes pour visualiser nos points de données,Et l'ajustement de superposition peut être sélectionné AdaBoost Limites décisionnelles du modèle.


def plot(X: np.ndaay,
y: np.ndrry,
cf=None) -> None:
""" Dessiner2DDe±Échantillons,Limite de décision facultative """


if not ax:
fig, ax = plt.sults(fgsze=(5, 5), di=100)

pad = 1
x_min, x_max = X[:, 0].min() - pad, X[:, 0].max() + pad
y_min, y_max = X[:, 1].min() - pad, X[:, 1].max() + pad

if saligs is not None:
sies = np.array(spl_wigts) * X.hae[0] * 100
else:
sze = np.oes(sape=X.shpe[0]) * 100



if cf:
xx, yy = np.ehrid(n.aange(x_min, x_max, plot_step),
p.aang(y_min, y_max, plot_step))

pdt(np.c_[xx.ravel(), yy.ravel()])


# Si toutes les prévisions sont positives,Ajuster le diagramme de couleur en conséquence.
if list(np.niue(Z)) == [1]:
colors = ['r']
else:
colors = ['b', 'r']




ax.st_im(in+0.5, _ax-0.5)
ax.st_lm(ymin+0.5, yax-0.5)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.

Ensemble de données

Nous utiliserons une méthode similaire pour générer un ensemble de données  ,Mais utilise moins de points de données.La clé ici est que nous voulons deux classes non linéairement séparées,Parce que c'est AdaBoost Cas d'utilisation idéal pour.


def maketat(n: it = 100, rased: it = None):
""" Générer une évaluationAdaBoostEnsemble de données du classificateur """

nclas = int(n/2)

if ranmed:
np.ram.sed(rndoed)

X, y = me_gainqnes(n=n, n_fees=2, n_css=2)


plot(X, y)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Visualisation_07

Utiliser scikit-learn Effectuer des essais de référence

Commençons parscikit-learnImporterAdaBoostClassifier,Et l'adapter à notre ensemble de données,Pour établir une base de référence,Voir à quoi devrait ressembler la sortie de notre modèle.

from skarn.esele import AdosClaser

bnh = Adostlier(netrs=10, atm='SAMME').fit(X, y)
plat(X, y, bech)

tnr = (prdict(X) != y).man()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Python_08

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Python_09

Classificateur dans 10 Ajustement complet des ensembles de données de formation en itérations secondaires,Les points de données de notre ensemble de données sont raisonnablement séparés.

Écrivez votre propreAdaBoostClassificateur

Voici notreAdaBoostCode - cadre du classificateur.Après ajustement du modèle,Nous sauvegarderons tous les attributs clés dans la classe--Inclure le poids de l'échantillon pour chaque itération--Pour qu'on puisse les examiner plus tard.,Pour comprendre le rôle de nos algorithmes à chaque étape.

Le tableau suivant montre la cartographie entre les noms des variables que nous utiliserons et les symboles mathématiques que nous avons utilisés précédemment dans la description de l'algorithme..

Variables

Mathématiques

​sampleweight​

wi(t)

​stump​

ht(x)

​stumpweight​

αt

​error​

εt

​predict(X)​

Ht(x)

class AdBst:
""" AdaBoostClassificateur """

def __init__(self):
self.sump = None
self.stup_weght = None
self.erro = None
self.smle_weih = None

def _ceck_X_y(self, X, y):
""" Valider les hypothèses relatives au format des données d'entrée"""
assrt st(y) == {-1, 1}
reurn X, y
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

Modèle d'ajustement

Pensez à nos algorithmes pour adapter le modèle:

  1. Trouver​​ht(x)​​ Apprentissage faible minimisé Appareil PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Modèle de classification_10​.
  2. Nous avons pondéré les apprenants faibles en fonction de leur précision: PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Visualisation_11
  3. Augmenter le poids de l'observation de la classification des erreurs: PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Apprentissage intégré_12​. Attention! PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Python_13​Lorsque les hypothèses sont conformes à l'étiquette, elles sont évaluées comme suit: +1,Lorsqu'il n'est pas conforme à l'étiquette, il est évalué comme suit: -1.
  4. Poids normalisé,De faire PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_AdaBoost_14​.

Le code suivant est essentiellement l'implémentation individuelle ci - dessus,Mais il y a quelques points à noter:

  • Parce que l'accent est mis ici sur la compréhensionAdaBoostÉléments de collection pour,Nous appelleronsDecinTeassfir(mxdpth=1, mlefnes=2)Réaliser la sélection de chaqueht(x)La logique de.
  • On est là. for Définir le poids initial uniforme de l'échantillon en dehors du cycle,Et à chaque itération t Paramètres internes t+1 Poids,Sauf si c'est la dernière itération.Ici, nous sauvegardons délibérément un ensemble de poids d'échantillon sur le modèle d'ajustement,Afin que nous puissions visualiser le poids de l'échantillon plus tard à chaque itération.

def ft(slf, X: narry, y: ndray, ites: int):
""" Ajustement du modèle à l'aide des données de formation """

X, y = slf._chck_X_y(X, y)
n = X.shpe[0]

# DémarrageNumpyTableau
self.smle_wegts = np.zos(shpe=(itrs, n))
self.tumps = np.zeos(she=iters, dtpe=obect)


# Initialiser les poids uniformément
sef.sampewegts[0] = np.one(shpe=n) / n

for t in range(iters):
# Adapter l'apprenant faible
fit(X, y, smpe_eght=urrsmle_igts)

# Calcul des erreurs et des poids des souches à partir des prédictions des apprenants faibles
predict(X)
err = cu_seghts[(pred != y)].sum()# / n
weiht = np.log((1 - err) / err) / 2

# Mettre à jour le poids de l'échantillon
newweis = (
crrawe * np.exp(-sum_wiht * y * tupd)
)


# Si ce n'est pas l'itération finale,Mise à jourt+1Poids de l'échantillon pour
if t+1 < ies:
sef.smpe_wit[t+1] = ne_saml_wigt

# Enregistrer les résultats de l'itération
sef.sups[t] = tump

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.

Faire des prévisions

Nous prenons“Vote à la majorité pondérée”Pour faire une prévision finale,Symbole calculé comme une combinaison linéaire de la prédiction de chaque souche et du poids correspondant de la souche (±).

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Visualisation_15

def pedc(self, X):
""" Prévision à l'aide d'un modèle déjà ajusté """
supds = np.aray([stp.pect(X) for sump in slf.stps])
return np.sgn(np.dt(self.tum_whts, sumpreds))
  • 1.
  • 2.
  • 3.
  • 4.

Performance

Maintenant, mettons tout ensemble.,Ajuster le modèle avec les mêmes paramètres que nos repères.

# Méthode de désignation des fonctions que nous définissons individuellement comme classificateurs
AaBt.fit = fit
Adostreit = pedct

plot(X, y, clf)

err = (clf.prdc(X) != y).mean()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Modèle de classification_16

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Visualisation_17

Pas mal.! Nous avons obtenusklearnRésultats identiques pour les repères.J'ai choisi cet ensemble de données pour montrerAdaBoostAvantages,Mais tu peux gérer ce carnet toi - même.,Voir s'il correspond à la sortie,Quelles que soient les conditions de départ.

Visualisation

Parce que nous gardons toutes les variables intermédiaires comme un tableau dans notre modèle d'ajustement,Nous pouvons utiliser les fonctions suivantes pour visualiser notre ensemble d'apprenants à chaque itérationtLe processus d'évolution.

  • La colonne de gauche affiche la sélection "La souche "Faible apprenant,Elle est liée àht(x)Correspondance.
  • La colonne de droite montre les apprenants forts accumulés jusqu'à présent. Ht(x).
  • La taille des marqueurs de points de données reflète leur poids relatif.Les données mal classifiées lors de la dernière itération seront pondérées davantage,Donc C'est plus grand dans la prochaine itération.
def truost(clf, t: int):
""" AdaBoostAjustement,Jusqu'à(Et comprend)Une itération particulière. """

nwwghts = clf.suweighs[:t]


def plotost(X, y, clf, iters=10):
""" Cartographie des apprenants faibles et cumulatifs forts à chaque itération. """

# Plus grande grille
fig, axs = subplos(fisze=(8,ters*3),
nrows=iers,
ncls=2,
shaex=True,
dpi=100)



# Dessiner un apprenant faible
plotot(X, y, cf.[i],
saplweghs=clf.saple_wigts[i],
aoat=False, a=ax1)

#Dessiner un apprenant fort
truost(clf, t=i + 1)
pltot(X, y, tun_cf,
weights=smplweih[i], ax=ax2)

plt.t_aot()

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Python_18

Pourquoi certaines itérations n'ont pas de limites décisionnelles?

Vous remarquerez peut - être,Notre faible apprenant est en itération t=2,5,7,10 Tous les points sont classés comme positifs.Cela se produit en raison du poids actuel de l'échantillon,Il suffit de prévoir tous les points de données comme étant positifs pour obtenir une erreur minimale.Votre attention, s'il vous plaît.,Dans chaque graphique de ces itérations ci - dessus,,Les échantillons négatifs sont entourés d'échantillons positifs proportionnellement plus pondérés.

Il n'y a aucun moyen de tracer une limite de décision linéaire pour classifier correctement n'importe quel nombre de points de données négatifs,Sans classification erronée des poids cumulatifs plus élevés des échantillons positifs.Mais cela n'empêche pas notre algorithme de converger.Tous les points négatifs sont mal classés,Par conséquent, le poids de l'échantillon augmente.Cette mise à jour du poids permet aux apprenants faibles de la prochaine itération de découvrir une limite de décision significative.

Pourquoi avons - nous raison alpha_t Utilisez cette formule spécifique?

Pourquoi utilisons - nous cette valeur spécifique ​​αt​​?Nous pouvons prouver le choix PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Python_19​ Minimiser les pertes exponentielles sur l'ensemble d'entraînement PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Modèle de classification_20​ .

Ignorer les fonctions symboliques,Nous​​H​​ Lors de l'itération Un apprenant puissant ​​t​​ Est une combinaison pondérée d'apprenants faibles ​​h(x)​​.Dans n'importe quelle itération donnée ​​t​​,On peut.​​Ht(x) ​​Définir Récursivement Est la valeur à l'itération ​​t−1​​ Un apprenant faible pondéré avec l'itération actuelle.

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Visualisation_21

Nous appliquons H La fonction de perte pour n Perte moyenne de points de données.Peut être remplacé Définition récursive de ​​Ht(x)​​,Et diviser le terme exponentiel en utilisant l'identité PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_AdaBoost_22​.

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Python_23

Maintenant, nous prenons la fonction de perte Dérivé de ​​αt​​ Et réglez - le à zéro pour trouver la valeur du paramètre qui minimise la fonction de perte.Vous pouvez diviser la somme en deux:case where ​​ht(xi)=yi​​ Et case where  ​​ht(xi)≠yi​​.

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Python_24

Enfin,Nous reconnaissons que la somme des poids est équivalente au calcul des erreurs dont nous avons discuté précédemment.:∑Dt(i)=ϵt.Effectuer le déplacement,Puis l'opération algébrique,On peut se séparer.αt.

 

PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Apprentissage intégré_25

Lire la suite



PythonApprentissage intégré:Écrivez vos propres constructionsAdaBoostModèle de classification visualisation des limites de décision etsklearnComparaison des appels de paquets_Apprentissage intégré_26

 

版权声明
本文为[Petit assistant d'extension]所创,转载请带上原文链接,感谢
https://pythonmana.com/2021/11/20211125104047497W.html

  1. Sorting out the learning route for Python beginners
  2. The 6-line Python code uses the pdf2docx module converter object to convert PDF into docx file
  3. Batch compression of picture files using Python
  4. Using Python to write djikstra algorithm for robot path planning
  5. python实现手机号获取短信验证码 | 对接打码平台
  6. Detailed explanation of Euler Rodriguez code in Python
  7. Prove that angular displacement is not a vector with Python
  8. Using Python program to deeply understand homogeneous transfer matrix t
  9. Triple product formula of vector and its proof (with Python code)
  10. Derivation of differential formula of DH matrix using Python
  11. Python openpyxl operation on Excel (get the total number of columns, get the value of a row, get the value of a column, and set the cell value)
  12. Realizing Excel data filtering and data matching with Python
  13. Python reads and writes files
  14. Four scenarios of processing Excel files with Python
  15. Python converts dictionary to excel
  16. Python implements file reading and writing
  17. Basic Python syntax -- functions
  18. Python learning thinking
  19. Python basic syntax -- Boolean operation, break, continue, pass
  20. Python basic syntax -- loop
  21. Basic Python syntax -- lists, dictionaries
  22. Python basic syntax -- conditional judgment, input ()
  23. Python first experience - efficient office, data analysis, crawler
  24. Modulenotfounderror: no module named 'Django summernote details
  25. Key points for Django to make personal blog website
  26. Path setting of templates in Django settings
  27. Leetcode 1611. Minimum one bit operations to make integers Zero (Python)
  28. Directory C: \ users \ a \ desktop \ Django_ The blog master is registered as the GIT root, but no git repository details are found there
  29. Django. Core. Exceptions. Improveconfigured: application labels aren't unique, duplicates: admin
  30. How to verify that Django has created the project details correctly
  31. How to create a database when using Django to construct a website
  32. The solution of using Django framework to create project in Windows system
  33. Running Python virtual environment on win10 system to execute ll_ Env \ scripts \ activate: unable to load file elaboration scheme
  34. Detailed explanation of constructing virtual environment with Django in Python 3
  35. Python implementation of affine cipher
  36. RC4 Python implementation
  37. Simple: Python_ Automatic body temperature clock
  38. 用python把两个csv中的日期的列提出年,做出新的一列,再把两个csv表格按照新做出的日期这列和ID号合并为一个表。
  39. python中类实例化后,其对象无法被其他模块调用方法
  40. [JSON] - Python creates JSON file format
  41. Utilisez Python pour proposer l'année de la colonne de date dans les deux CSV, faire une nouvelle colonne, puis combiner les deux tableaux CSV en un seul tableau avec la colonne de date et le numéro d'identification.
  42. 关于#python#的问题,请各位专家解答!
  43. ***
  44. ***
  45. 關於#python#的問題,請各比特專家解答!
  46. S'il vous plaît répondre aux questions de Python!
  47. About the import of Python class
  48. Magic Python property decorator: 1 line of code makes Python methods become properties in seconds
  49. Python 音频调整音量(附代码) | Python工具
  50. Python programming ideas [series of articles]
  51. Python crawler programming idea (67): modify nodes using pyquery
  52. Python crawler programming idea (66): using pyquery to obtain node information
  53. Python crawler programming idea (65): find nodes using pyquery
  54. Python crawler programming idea (64): using CSS selectors in pyquery
  55. Python crawler programming idea (63): basic knowledge of pyquery
  56. Python crawler programming idea (62): project practice: capturing cool dog online red song list
  57. Python crawler programming idea (61): project practice: capturing rental information
  58. Python crawler programming idea (60): get CSS selector code through browser
  59. Python crawler programming idea (58): nested selection nodes with beautiful soup CSS selectors
  60. Python crawler programming idea (56): find method of beautiful soup method selector