Introduction à l'apprentissage automatique (7): algorithme de classification-algorithme d'arbre de décision

Répertoire d'apprentissage:
Insérez la description de l'image ici
Répertoire du contenu de l'arbre de décision:
Insérez la description de l'image ici

1. Le rôle de l'arbre de décision:

Insérez la description de l'image ici
   C'est notre processus de prise de décision pour juger s'il s'agit d'un bon melon ou d'un mauvais melon. Le rôle de l' arbre de décision :
1. Aidez-nous à choisir la fonction à utiliser en premier pour if, et la fonction à utiliser pour si, de sorte que nous pouvons rapidement déterminer s'il s'agit d'un bon melon ou d'un mauvais melon. Bad melon
2. Aidez-nous à déterminer la valeur de la fonction comme norme de division

2. Dérivation du principe

Insérez la description de l'image ici
Insérez la description de l'image ici

Insérez la description de l'image ici

3. Prédiction de code:

Insérez la description de l'image ici

Comparaison de cas: comparez la précision de classification de l'algorithme d'arbre de décision et de l'algorithme KNN sur l'ensemble de données d'iris

Utilisez l'algorithme d'arbre de décision pour classer l'ensemble de données d'iris:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
def dicision_iris():
   """使用决策树对鸢尾花数据集进行分类
   :return:"""
   # 获取数据
   iris = load_iris()
   # 划分数据集
   x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
   #决策树估计器
   estimator=DecisionTreeClassifier(criterion="entropy")
   estimator.fit(x_train, y_train)  # 把训练数据放进去
   #模型评估
   #方法一:直接比对真实值和预测值
   y_predict=estimator.predict(x_test)
   print('y_predict:\n',y_predict)
   print('直接比对真实值和预测值:\n', y_test==y_predict)
   # 方法二:计算准确率
   score = estimator.score(x_test,y_test)
   print('准确率:\n', score)
   
if __name__=='__main__':
    dicision_iris()

Insérez la description de l'image ici
Utilisez l'algorithme KNN pour classer l'ensemble de données d'iris:
Insérez la description de l'image ici
Conclusion : L'algorithme KNN est plus précis, car l'algorithme KNN convient à l'origine pour les petits ensembles de données (l'ensemble de données d'iris ne contient que 150 échantillons), et il va calculer la distance un par un. L'arbre de décision est plus adapté aux grands ensembles de données. -------- Différents algorithmes conviennent à différents scénarios

4. Visualisation de l'arbre de décision

Insérez la description de l'image ici
Insérez la description de l'image ici
Le fichier de points généré:

digraph Tree {
    
    
node [shape=box] ;
0 [label="petal width (cm) <= 0.75\nentropy = 1.584\nsamples = 112\nvalue = [39, 37, 36]"] ;
1 [label="entropy = 0.0\nsamples = 39\nvalue = [39, 0, 0]"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="petal width (cm) <= 1.75\nentropy = 1.0\nsamples = 73\nvalue = [0, 37, 36]"] ;
0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
3 [label="petal length (cm) <= 5.05\nentropy = 0.391\nsamples = 39\nvalue = [0, 36, 3]"] ;
2 -> 3 ;
4 [label="sepal length (cm) <= 4.95\nentropy = 0.183\nsamples = 36\nvalue = [0, 35, 1]"] ;
3 -> 4 ;
5 [label="petal length (cm) <= 3.9\nentropy = 1.0\nsamples = 2\nvalue = [0, 1, 1]"] ;
4 -> 5 ;
6 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1, 0]"] ;
5 -> 6 ;
7 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 0, 1]"] ;
5 -> 7 ;
8 [label="entropy = 0.0\nsamples = 34\nvalue = [0, 34, 0]"] ;
4 -> 8 ;
9 [label="petal width (cm) <= 1.55\nentropy = 0.918\nsamples = 3\nvalue = [0, 1, 2]"] ;
3 -> 9 ;
10 [label="entropy = 0.0\nsamples = 2\nvalue = [0, 0, 2]"] ;
9 -> 10 ;
11 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1, 0]"] ;
9 -> 11 ;
12 [label="petal length (cm) <= 4.85\nentropy = 0.191\nsamples = 34\nvalue = [0, 1, 33]"] ;
2 -> 12 ;
13 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1, 0]"] ;
12 -> 13 ;
14 [label="entropy = 0.0\nsamples = 33\nvalue = [0, 0, 33]"] ;
12 -> 14 ;
}

Insérez la description de l'image ici
Copiez le contenu du fichier dot sur ce site Web:
Insérez la description de l'image ici

5. Résumé de l’algorithme de l’arbre de décision:

Avantages:
          interprétabilité Visualisation forte
Inconvénients:
          Lorsque la quantité de données est très grande, l'arbre de décision sera trop compliquée, ce qui facilement conduire à de bons échantillons de formation et les échantillons pauvres (surapprentissage).
Comment améliorer?
          Algorithme de réduction du panier (implémenté dans l'API d'arbre de décision)
          algorithme de forêt aléatoire (dans la section suivante)

6. Cas: prédiction de survie des passagers du Titanic

Insérez la description de l'image ici
L'extraction de la position, de l'âge, du sexe et autres n'affecte pas sa survie:
Insérez la description de l'image ici
traitement des valeurs manquantes dans l'âge, remplissage de la valeur moyenne:
Insérez la description de l'image ici
conversion vers un format de dictionnaire:
Insérez la description de l'image ici
division de l'ensemble de données, extraction des caractéristiques du dictionnaire, prédicteur d'arbre de décision, évaluation:
Insérez la description de l'image ici
Résultats:
Insérez la description de l'image ici

import pandas as pd
import graphviz
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer

# 获取数据
path = "http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt"
titanic = pd.read_csv(path)

# 获取特征值与目标值
x = titanic[['pclass', 'age', 'sex']]
y = titanic['survived']

# 处理数据
x['age'].fillna(x['age'].mean(), inplace=True)
# 转换成字典
x = x.to_dict(orient='recorda')
# 划分数据
x_train, x_test, y_train, y_test = train_test_split(x, y)

# 字典特征提取
transfer = DictVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

# 构建模型
estimator = DecisionTreeClassifier(criterion='entropy')
estimator.fit(x_train, y_train)
y_predict = estimator.predict(x_test)
print('预测值与真实值比对:\n', y_predict == y_test)
# 求准确率
score = model.score(x_test, y_test)
print('准确率:\n', score)
# 可视化决策树
image = export_graphviz(
      estimator,
      out_file="C:/Users/Admin/Desktop/iris_tree.dot",
      feature_names=transfer.get_feature_names(),
)

Résumé des algorithmes de classification:
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_45234219/article/details/114998217
conseillé
Classement