ホームページ  >  記事  >  バックエンド開発  >  Pythonはデシジョンツリーアルゴリズムを実装します

Pythonはデシジョンツリーアルゴリズムを実装します

零到壹度
零到壹度オリジナル
2018-04-19 16:50:333249ブラウズ

この記事の例では、Python でデシジョン ツリー アルゴリズムを実装する方法を説明します。参考として皆さんと共有してください。詳細は次のとおりです。

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))


人々の購買力を分類してプロジェクトを分類する 最終プロセスでは、結果について特定の予測を行うこともできます。コードは上に示されていますが、いくつかの利点と欠点があります

決定木アルゴリズムの利点:

1) シンプルで直感的で、生成された決定木は非常に直感的です。

2)基本的には前処理の必要がなく、事前の正規化や欠損値への対応も必要ありません。

3) 決定木予測を使用するコストはO(log2) m) O(log2m)。 m はサンプル数です。

4)離散値と連続値の両方を扱うことができます。多くのアルゴリズムは、離散値または連続値のみに焦点を当てています。

5) 多次元出力の分類問題を扱える。

6) ニューラルネットワークなどのブラックボックス分類モデルと比較して、決定木は論理的によく説明できます

7) 交差検証枝刈りを使用してモデルを選択し、汎化能力を向上させることができます。

8) 異常箇所に対する耐障害性が高く、ロバスト性も高い。

決定木アルゴリズムの欠点を見てみましょう:

1) 決定木アルゴリズムは非常に簡単に過学習し、一般化能力が弱くなります。これは、ノードのサンプルの最小数を設定し、決定木の深さを制限することで改善できます。

2) 決定木はサンプルのわずかな変化により木構造に大きな変化を引き起こします。これはアンサンブル学習などの手法で解決できます。

3) 最適な決定木を見つけることは NP 困難な問題であり、通常はヒューリスティックな手法を使用しており、局所最適性に陥りやすいです。これはアンサンブル学習などの方法で改善できます。

4) 決定木が XOR などのより複雑な関係を学習することは困難です。一般に、この関係はニューラル ネットワーク分類法を使用して解決できます。

5) 特定の特徴のサンプル割合が大きすぎる場合、生成される決定木はこれらの特徴に偏る傾向があります。これはサンプルの重みを調整することで改善できます。


関連する推奨事項:

上位 10 のデータ マイニング アルゴリズムのデシジョン ツリーの詳細な説明

デシジョン ツリー アルゴリズム

アルゴリズムの原則と事例

デシジョンツリーアルゴリズムの実装

以上がPythonはデシジョンツリーアルゴリズムを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。