sklearn実装決定ツリー
6585 ワード
けっていじゅ
決定ツリーは分類と回帰のための非パラメータ監督学習方法である.ターゲットは、データフィーチャーから推定される簡単な決定ルールを学習することによって、ターゲット変数値を予測するモデルを作成することです.
決定ツリーの利点:
1)理解と解釈が容易である.樹木は可視化できる.
2)わずかなデータ準備のみが必要で、データは規範化されなくてもよいが、決定ツリーに損失した値があってはならないことに注意しなければならない.
3)この木を用いた費用は,訓練木に用いられるデータポイント数の対数である.
4)多出力の問題を扱うことができる.
5)ホワイトボックスモデルを使用します.与えられた場合がモデルで観測可能である場合,この場合の解釈はブール論理で容易に説明できる.対照的に、ブラックボックスモデル(例えば、人工ニューラルネットワーク)では、結果はより説明しにくいかもしれない.
6)統計テストを使用してモデルを検証できます.
決定ツリーの欠点:
1)フィットしやすい.この問題を回避するために、ツリーの枝切りを行ったり、リーフノードに必要な最小サンプル数を設定したり、ツリーの最大深さを設定したりすることができます.
2)決定木は不安定であり,データ中のわずかな変化が全く異なる木を生成する可能性がある.統合で意思決定ツリーを使用すると、この問題を緩和できます.
3)決定ツリーがそれらを表現しにくいため、いくつかの概念は学びにくい.例えば、異偶性または多重化の問題である.
4)あるカテゴリが支配的である場合,決定ツリー学習器は偏見のあるツリーを作成する.したがって、決定ツリーと一致する前にデータセットをバランスさせることを推奨します.
sklearnを使用した意思決定ツリー
sklearnは決定ツリーのコアコードを実現する:
Sklearn実装決定ツリーの詳細
Sklearnは以下の4種類のツリーを実現しています
1)tree.DecisionTreeClassifier([criterion,...])決定木分類器.
2)tree.DecisionTreeRegressor([criterion,...])回帰木.
3)tree.ExtraTreeClassifier([criterion,...])非常にランダムなツリー分類器である.
4)tree.ExtraTreeRegressor([criterion,...])非常にランダムなツリー回帰器である.
tree.export_graphviz(decision_tree[,...])ツリーを点形式でエクスポート
--------------------1) sklearn.tree.DecisionTreeClassifier----------------------------------
class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)
パラメータ:
criterion:文字型、オプション、この決定ツリーで採用される最適な分割属性を規定する判定方法は、「gini」、「entropy」、デフォルト「gini」の2つあります.
splitter:文字型、オプション(デフォルト=「best」)各ノードで分割を選択するためのポリシーで、「best」または「random」と記入し、前者はフィーチャーのすべての分割点の中で最適な分割点を見つけることができます.後者はランダムに部分区分点の中で局所的に最適な区分点を探す.デフォルトの「best」は、サンプル量が少ない場合に適していますが、サンプルデータ量が非常に大きい場合は、決定ツリー構築推奨「random」
max_depth:int型またはNone、オプション(デフォルト=None)ツリーの最大深さは、オーバーフィット防止に役立ちます.入力しないと、決定ツリーはサブツリーを構築する際にサブツリーの深さを制限しません.一般的に、データが少ない場合や特徴が少ない場合は、この値にかかわらず構いません.モデルサンプル量が多く,特徴も多い場合,この最大深さを制限することを推奨し,具体的な値はデータの分布に依存する.通常は10~100の値をとることができます.
min_samples_split:int型float型、オプション(デフォルト=2)内部ノードを分割するのに必要な最小サンプル数;int型の場合min_samples_splitは最小サンプル数です.float型の場合min_samples_splitはスコアであり、ceil(min_samples_split*n_samples)は各分割の最小サンプル数である.
min_samples_leaf:int型float型、オプション(デフォルト=1)リーフノードに必要な最小サンプル数.intタイプの場合min_samples_leafを最小値とします.floatならmin_samples_leafはスコアであり、ceil(min_samples_leaf*n_samples)は各ノードの最小サンプル数である.
min_weight_fraction_leaf:浮動小数点型、オプション(デフォルト=0).リーフノード上の(すべての入力サンプルの)重み値の和の最小重み付けスコア.sampleが提供されていない場合Weightの場合、試料の重量は等しい.
max_Features:int,float,string or None,オプション(デフォルト=None)で、最適な分割を探す際に考慮する特性の数.intタイプの場合は、各分割におけるmax_を考慮するFeatures特性.floatならmax_Featuresはスコアであり、各分割においてint(max_features*n_features)特性が考慮される.「auto」の場合max_features=sqrt(n_features).「sqrt」の場合max_features=sqrt(n_features).「log 2」の場合max_features=log2(n_features).なければmax_features=n_features.
class_Weight:サンプルの各カテゴリの重みを指定します.主に、トレーニングセットのいくつかのカテゴリのサンプルが多すぎることを防止するために、トレーニングの決定ツリーがこれらのカテゴリに偏りすぎます.ここでは、各サンプルの重みを自分で指定したり、「balanced」を使用したりすることができます.「balanced」を使用すると、アルゴリズムは自分で重みを計算し、サンプル量の少ないカテゴリに対応するサンプルの重みが高くなります.もちろん、サンプルカテゴリの分布に明らかな偏りがない場合は、このパラメータにかかわらずデフォルトの「None」を選択できます.
random_state:int型RandomStateインスタンスまたはNone、オプション(デフォルト=None)intの場合random_stateは乱数ジェネレータで使用されるシードです.RandomStateインスタンスの場合、random_stateは乱数ジェネレータです.ない場合、乱数生成器はnpである.randomで使用されるRandomStateの例.
方法:
apply(X[, check_input])
decision_path(X[, check_input])
fit(X, y[, sample_weight, check_input, …])
get_params([deep])
predict(X[, check_input])
predict_log_proba(X)
predict_proba(X[, check_input])
score(X, y[, sample_weight])
set_params(**params)
推奨事項:
1. 私たちのデータのfeatureが多い場合は、アルゴリズムをサポートするのに十分なデータ量が必要です.そうしないと、overfittingが簡単になります.
2.サンプル数が少ないがサンプル特徴が非常に多い場合は、決定ツリーモデルにフィットする前に、主成分分析(PCA)、特徴選択(Losso)、または独立成分分析(ICA)などの次元規則を先に行うことを推奨します.このような特徴の次元は大幅に減少します.決定ツリーモデルにフィットすると効果的です.
3. 意思決定ツリーの可視化を推奨するとともに、意思決定ツリーの深さ(例えば最大3層)を制限し、生成された意思決定ツリーのデータの初歩的なフィット状況を観察してから、深さを増やすかどうかを決定することができます.
4訓練モデルではまず、サンプルのカテゴリ状況(主に分類ツリーを指す)を観察することに注意し、カテゴリ分布が非常に不均一である場合、class_weightを用いてモデルがサンプルの多いカテゴリに偏りすぎることを制限することを考慮する.
5決定ツリーの配列はnumpyのfloat 32タイプを用い,訓練データがこのようなフォーマットでない場合,アルゴリズムはまずcopyをしてから実行する.
6入力されたサンプル行列が疎である場合、フィッティング前に
例:
--------------------------sklearn.tree.DecisionTreeRegressor----------------パラメータ:criterion:mseまたはmaeを使用できます.前者は平均分散で、後者は平均値との差の絶対値の和です.デフォルトの「mse」の使用をお勧めします.一般的に「mse」は「mae」よりも正確です.
class_Weight:回帰ツリーには変数がありません
他のパラメータは分類ツリーと同じです
決定ツリーは分類と回帰のための非パラメータ監督学習方法である.ターゲットは、データフィーチャーから推定される簡単な決定ルールを学習することによって、ターゲット変数値を予測するモデルを作成することです.
決定ツリーの利点:
1)理解と解釈が容易である.樹木は可視化できる.
2)わずかなデータ準備のみが必要で、データは規範化されなくてもよいが、決定ツリーに損失した値があってはならないことに注意しなければならない.
3)この木を用いた費用は,訓練木に用いられるデータポイント数の対数である.
4)多出力の問題を扱うことができる.
5)ホワイトボックスモデルを使用します.与えられた場合がモデルで観測可能である場合,この場合の解釈はブール論理で容易に説明できる.対照的に、ブラックボックスモデル(例えば、人工ニューラルネットワーク)では、結果はより説明しにくいかもしれない.
6)統計テストを使用してモデルを検証できます.
決定ツリーの欠点:
1)フィットしやすい.この問題を回避するために、ツリーの枝切りを行ったり、リーフノードに必要な最小サンプル数を設定したり、ツリーの最大深さを設定したりすることができます.
2)決定木は不安定であり,データ中のわずかな変化が全く異なる木を生成する可能性がある.統合で意思決定ツリーを使用すると、この問題を緩和できます.
3)決定ツリーがそれらを表現しにくいため、いくつかの概念は学びにくい.例えば、異偶性または多重化の問題である.
4)あるカテゴリが支配的である場合,決定ツリー学習器は偏見のあるツリーを作成する.したがって、決定ツリーと一致する前にデータセットをバランスさせることを推奨します.
sklearnを使用した意思決定ツリー
sklearnは決定ツリーのコアコードを実現する:
#1)sklearn
from sklearn import tree
X=[[0,0],[1,1]]
Y=[0,1]
clf=tree.DecisionTreeClassifier()
clf=clf.fit(X,Y)
print(clf.predict([[2,2]]))#
print(clf.predict_proba([[2,2]]))#
#2)sklearn
from sklearn.datasets import load_iris
from sklearn import tree
iris=load_iris()
clf=tree.DecisionTreeClassifier()
clf=clf.fit(iris.data,iris.target)
#3)sklearn
# : y ,
from sklearn import tree
X=[[0,0],[2,2]]
y=[0.5,0.5]
clf=tree.DecisionTreeRegressor()
clf=clf.fit(X,y)
print(clf.predict([[1,1]]))
Sklearn実装決定ツリーの詳細
Sklearnは以下の4種類のツリーを実現しています
1)tree.DecisionTreeClassifier([criterion,...])決定木分類器.
2)tree.DecisionTreeRegressor([criterion,...])回帰木.
3)tree.ExtraTreeClassifier([criterion,...])非常にランダムなツリー分類器である.
4)tree.ExtraTreeRegressor([criterion,...])非常にランダムなツリー回帰器である.
tree.export_graphviz(decision_tree[,...])ツリーを点形式でエクスポート
--------------------1) sklearn.tree.DecisionTreeClassifier----------------------------------
class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)
パラメータ:
criterion:文字型、オプション、この決定ツリーで採用される最適な分割属性を規定する判定方法は、「gini」、「entropy」、デフォルト「gini」の2つあります.
splitter:文字型、オプション(デフォルト=「best」)各ノードで分割を選択するためのポリシーで、「best」または「random」と記入し、前者はフィーチャーのすべての分割点の中で最適な分割点を見つけることができます.後者はランダムに部分区分点の中で局所的に最適な区分点を探す.デフォルトの「best」は、サンプル量が少ない場合に適していますが、サンプルデータ量が非常に大きい場合は、決定ツリー構築推奨「random」
max_depth:int型またはNone、オプション(デフォルト=None)ツリーの最大深さは、オーバーフィット防止に役立ちます.入力しないと、決定ツリーはサブツリーを構築する際にサブツリーの深さを制限しません.一般的に、データが少ない場合や特徴が少ない場合は、この値にかかわらず構いません.モデルサンプル量が多く,特徴も多い場合,この最大深さを制限することを推奨し,具体的な値はデータの分布に依存する.通常は10~100の値をとることができます.
min_samples_split:int型float型、オプション(デフォルト=2)内部ノードを分割するのに必要な最小サンプル数;int型の場合min_samples_splitは最小サンプル数です.float型の場合min_samples_splitはスコアであり、ceil(min_samples_split*n_samples)は各分割の最小サンプル数である.
min_samples_leaf:int型float型、オプション(デフォルト=1)リーフノードに必要な最小サンプル数.intタイプの場合min_samples_leafを最小値とします.floatならmin_samples_leafはスコアであり、ceil(min_samples_leaf*n_samples)は各ノードの最小サンプル数である.
min_weight_fraction_leaf:浮動小数点型、オプション(デフォルト=0).リーフノード上の(すべての入力サンプルの)重み値の和の最小重み付けスコア.sampleが提供されていない場合Weightの場合、試料の重量は等しい.
max_Features:int,float,string or None,オプション(デフォルト=None)で、最適な分割を探す際に考慮する特性の数.intタイプの場合は、各分割におけるmax_を考慮するFeatures特性.floatならmax_Featuresはスコアであり、各分割においてint(max_features*n_features)特性が考慮される.「auto」の場合max_features=sqrt(n_features).「sqrt」の場合max_features=sqrt(n_features).「log 2」の場合max_features=log2(n_features).なければmax_features=n_features.
class_Weight:サンプルの各カテゴリの重みを指定します.主に、トレーニングセットのいくつかのカテゴリのサンプルが多すぎることを防止するために、トレーニングの決定ツリーがこれらのカテゴリに偏りすぎます.ここでは、各サンプルの重みを自分で指定したり、「balanced」を使用したりすることができます.「balanced」を使用すると、アルゴリズムは自分で重みを計算し、サンプル量の少ないカテゴリに対応するサンプルの重みが高くなります.もちろん、サンプルカテゴリの分布に明らかな偏りがない場合は、このパラメータにかかわらずデフォルトの「None」を選択できます.
random_state:int型RandomStateインスタンスまたはNone、オプション(デフォルト=None)intの場合random_stateは乱数ジェネレータで使用されるシードです.RandomStateインスタンスの場合、random_stateは乱数ジェネレータです.ない場合、乱数生成器はnpである.randomで使用されるRandomStateの例.
方法:
apply(X[, check_input])
decision_path(X[, check_input])
fit(X, y[, sample_weight, check_input, …])
get_params([deep])
predict(X[, check_input])
predict_log_proba(X)
predict_proba(X[, check_input])
score(X, y[, sample_weight])
set_params(**params)
推奨事項:
1. 私たちのデータのfeatureが多い場合は、アルゴリズムをサポートするのに十分なデータ量が必要です.そうしないと、overfittingが簡単になります.
2.サンプル数が少ないがサンプル特徴が非常に多い場合は、決定ツリーモデルにフィットする前に、主成分分析(PCA)、特徴選択(Losso)、または独立成分分析(ICA)などの次元規則を先に行うことを推奨します.このような特徴の次元は大幅に減少します.決定ツリーモデルにフィットすると効果的です.
3. 意思決定ツリーの可視化を推奨するとともに、意思決定ツリーの深さ(例えば最大3層)を制限し、生成された意思決定ツリーのデータの初歩的なフィット状況を観察してから、深さを増やすかどうかを決定することができます.
4訓練モデルではまず、サンプルのカテゴリ状況(主に分類ツリーを指す)を観察することに注意し、カテゴリ分布が非常に不均一である場合、class_weightを用いてモデルがサンプルの多いカテゴリに偏りすぎることを制限することを考慮する.
5決定ツリーの配列はnumpyのfloat 32タイプを用い,訓練データがこのようなフォーマットでない場合,アルゴリズムはまずcopyをしてから実行する.
6入力されたサンプル行列が疎である場合、フィッティング前に
csc_matrix
を疎化し、予測前にcsr_matrix 。
を呼び出すことを推奨する例:
from sklearn import tree
from sklearn.metrics import precision_recall_curve
from sklearn.cross_validation import train_test_split
import numpy as np
#
data=[]
labels=[]
with open('')as f:
for line in f:
linelist=line.split(' ')
data.append([float(el) for el in linelist[:-1]])
labels.append(linelist[-1].strip())
print(data)
print(labels)
x=np.array(data)
y=np.array(labels)
#
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)
clf=tree.DecisionTreeClassifier(criterion='entropy',splitter='best',max_depth=None,min_samples_split=2,
min_samples_leaf=1,min_weight_fraction_leaf=0.0,random_state=None)
clf.fit(x_train,y_train)
#
with open(r' ','w+')as f:
f=tree.export_graphviz(clf,out_file=f)
# :
print(clf.feature_importances_)
#
anwser=clf.predict(x_test)
print(anwser)
# ,
precision,recall,thresholds=precision_recall_curve(y_train,clf.predict(x_train))
print(precision,recall,thresholds)
--------------------------sklearn.tree.DecisionTreeRegressor----------------パラメータ:criterion:mseまたはmaeを使用できます.前者は平均分散で、後者は平均値との差の絶対値の和です.デフォルトの「mse」の使用をお勧めします.一般的に「mse」は「mae」よりも正確です.
class_Weight:回帰ツリーには変数がありません
他のパラメータは分類ツリーと同じです