python implémente l'algorithme d'arbre de décision

零到壹度
Libérer: 2018-04-19 16:50:33
original
3292 Les gens l'ont consulté

L'exemple de cet article décrit l'implémentation de l'algorithme d'arbre de décision en python. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import tree
from sklearn import preprocessing
from sklearn.externals.six import StringIO

# 读取csv数据,并将数据和特征值存入字典和类标签列表
allElectronicsData = open(r'AllElectronics.csv', 'rt')
reader = csv.reader(allElectronicsData)
headers = next(reader)
# 原代码中用的是:
# headers = reader.next()
# 这句代码应该是之前的版本用的,现在已经更新了没有next这个函数

# print(headers)

featureList = []
labelList = []

for row in reader:
    labelList.append(row[len(row) - 1])
    rowDict = {}
    for i in range(1, len(row) - 1):
        rowDict[headers[i]] = row[i]
    featureList.append(rowDict)

# print(featureList)


# 将特征值矢量化,代表将各种参数进行矢量化
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray()

# print("dummyX: " + str(dummyX))
# print(vec.get_feature_names())

# print("labelList: " + str(labelList))

# 将类标签列表矢量化,就是最后的结果
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
# print("dummyY: " + str(dummyY))

# 使用决策树进行分类
clf = tree.DecisionTreeClassifier()
# clf = tree.DecisionTreeClassifier(criterion = 'entropy')
clf = clf.fit(dummyX, dummyY)
# print("clf: " + str(clf))

# 将模型进行可视化
with open("allElectrionicInformationOri.dot", 'w') as f:
    f = tree.export_graphviz(clf, feature_names = vec.get_feature_names(), out_file = f)

oneRowX = dummyX[0, :]
# print("oneRowX: " + str(oneRowX))

# 接下来改变一些数据进行预测
newRowX = oneRowX

newRowX[0] = 0
newRowX[1] = 1
print("newRowX: " + str(newRowX))

predictedY = clf.predict(newRowX.reshape(1, -1))  # 预测的结果需要加上后面的reshape(1, -1),不然会
# 报错:
# ValueError: Expected 2D array, got 1D array instead:
# array=[0. 1. 1. 0. 1. 1. 0. 0. 1. 0.].
# Reshape your data either using array.reshape(-1, 1)
# if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
print("预测的结果为: " + str(predictedY))
Copier après la connexion


Catégorie le pouvoir d'achat du personnel pour classer les projets dans le processus final. , vous pouvez également faire certaines prédictions sur les résultats. Voir le code ci-dessus, il y a quelques avantages et inconvénients

Avantages de l'algorithme de l'arbre de décision :

 1) Simple et intuitif, l'arbre de décision généré est très intuitif.

2) Il n'y a fondamentalement pas besoin de prétraitement, pas besoin de normaliser à l'avance et de gérer les valeurs manquantes.

 3) Le coût de l'utilisation de la prédiction de l'arbre de décision est de >g2m)O(log2m). m est le nombre d'échantillons.  4) Peut gérer à la fois des valeurs discrètes et des valeurs continues. De nombreux algorithmes se concentrent uniquement sur des valeurs discrètes ou des valeurs continues. 5) Peut gérer le problème de classification de la sortie multidimensionnelle.  6) Par rapport aux modèles de classification par boîte noire tels que les réseaux de neurones, les arbres de décision peuvent être bien expliqués logiquement  7) L'élagage par validation croisée peut être utilisé pour sélectionner des modèles, améliorant ainsi la capacité de généralisation . 8) Il a une bonne tolérance aux pannes pour les points anormaux et une grande robustesse.

Examinons les lacunes de l'algorithme de l'arbre de décision :

1) L'algorithme de l'arbre de décision est très facile à surajuster, ce qui entraîne une faible capacité de généralisation. Cela peut être amélioré en définissant le nombre minimum d'échantillons pour les nœuds et en limitant la profondeur de l'arbre de décision.

2) Un léger changement dans l'échantillon entraînera des changements drastiques dans la structure arborescente. Ce problème peut être résolu grâce à des méthodes telles que l’apprentissage d’ensemble.

3) Trouver l'arbre de décision optimal est un problème NP-difficile. Nous utilisons généralement des méthodes heuristiques et pouvons facilement tomber dans des optima locaux. Cela peut être amélioré grâce à des méthodes telles que l’apprentissage d’ensemble.

4) Les arbres de décision sont difficiles à apprendre pour certaines relations complexes, telles que XOR. Il n'y a aucun moyen de contourner ce problème. Généralement, cette relation peut être résolue en utilisant la méthode de classification des réseaux neuronaux.

5) Si la proportion d'échantillon de certaines fonctionnalités est trop grande, l'arbre de décision généré aura tendance à être biaisé en faveur de ces fonctionnalités. Cela peut être amélioré en ajustant les poids des échantillons.


Recommandations associées :

Explication détaillée de l'arbre de décision des dix principaux algorithmes d'exploration de données

Algorithme d'arbre de décision

Principes et cas de l'algorithme d'arbre de décision

Implémentation de l'algorithme d'arbre de décision

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!