의사 결정 트리 알고리즘을 구현 sklearn

(1) 결정 트리 알고리즘 비모수 결정 알고리즘이며,이 멀티 - 레벨이 상기 분류 데이터는 다른 특성에 따라 결정되어, 최종적인 판정 결과의 예측이 필요하다. 이것은 분류 알고리즘을 해결할 수 회귀 문제를 해결할 수있는 좋은 설명 전력. 또한, 구축하는 다양한 방법을, 시작 지점의 복수를 갖는 의사 결정 트리를 구축 가지는 방법은, 의사 결정 트리의 시작 지점을 구축하는 방법을 트리의 각 결정 지점에 자리 잡고하는 것은 필요 나눌 수와 노드에서 이러한 차원에 대한 임계 값하는 어떤 차원에 분할 할 등 세부 사항 및합니다.

다음과 같이 특정 프로그램 코드는 분류 및 회귀 문제를 해결 sklearn에서 의사 결정 트리 알고리즘을 호출


# 1-1 오기 기본 트레이닝 데이터 세트
NP AS NumPy와 가져
오기 PLT AS matplotlib.pyplot
가져 오기 sklearn 데이터 집합
D = datasets.load_iris ()
X = d.data [: 2]
Y = d.target
(plt.figure )
plt.scatter (X [Y == 0,0], X [0,1 == Y, 컬러 = "R & LT ')
plt.scatter (X [Y의 == 1,0], X [Y의 == 1,1, 컬러 = "G")
plt.scatter (X [Y의 == 2,0], X [2,1 == Y, 컬러 = "B")
plt.show ()
# 1-2 데이터 분류 교육에서 수입 의사 결정 트리 알고리즘 sklearn 예측 달성하기 위해
sklearn.tree 가져 오기 DecisionTreeClassifier에서
hyperparameter 의사 결정 트리 분류와 관련된 의사 결정을 정의 DT1 = DecisionTreeClassifier (MAX_DEPTH = 2, 기준 = "엔트로피") #
(dt1.fit X, Y)
DEF의 plot_decision_boundary (모델 축) : # 출력 결정 경계 기능 (이차원 데이터 포인트)
X0, X1 = np.meshgrid (
np.linspace (축 [0] 축 [1]은 INT ((축 [1]시킴으로써 행한다 [0]) × 100)). (-1,1)을 바꿀
np.linspace를 (축 [2], 축 [3], INT. ((축 [3] - 축 [2]) * 100)) 바꿀 (-1,1)
)
x_new = np.c_ [x0.ravel () x1.ravel ()]
y_pre = model.predict (x_new)
ZZ = y_pre.reshape (x0.shape)
matplotlib.colors 가져올 ListedColormap
CUS ListedColormap = ([ "#의 EF9A9A", "#의 FFF59D", "# 90CAF9"])
plt.contourf (X0, X1 , ZZ, cmap를 = CUS)
plot_decision_boundary (DT1, 축 = 0.5,8,0,3])
, X plt.scatter (X [0,0의 Y ==] == Y를 0.1, 컬러 = " R ")
g ') plt.scatter (X [Y의 == 1,0], 컬러 = [1,1 == Y]를 X"
plt.scatter (X [Y의 == 2,0], X [Y == 2,1], 컬러 = "B")
plt.show ()
#定义二分类问题的信息熵计算函数np.sum (-p *의 순이익.
(P)) 로그인 데프 엔트로피 (p)를 :
* -p np.log 창 (P) -. (P-1) * np.log. (1-P)
X1 = np.linspace (0.01,0.99,100)
Y1 = 엔트로피 (X1)
plt.plot (X1, Y1 "R & LT ')
() plt.show
# 정보 엔트로피 원리 결정 트리 구성 엔트로피 구현 코드의 데이터 분할 원리 실시 달성
DEF 스플릿 (X, Y, D, 값) :
index_a = (X의 [: , D] <= 값)
index_b = (X [: D]> 값)이
반환 X [index_a], X [index_b], Y [index_a], Y [index_b]
컬렉션에서 가져 오기 카운터
DEF 엔트로피 (Y) :
카운터 1 카운터 = (Y)
RES = 0.0
Counter1.values NUM ()의 경우 :
P의 NUM = / LEN (Y)
RES = + - * P np.log (P)
RES 반환
DEF try_spit (X, Y)를 :
best_entropy = 플로트 ( "INF")
best_d, best_v = -1, -1
범위에 대한 D (x.shape의) [1.]
sorted_index = np.argsort (엑스 [: D])
에 대한 전 범위 (1 렌 (X))
의 경우, X [sorted_index [I-1] D =의 X [sorted_index [I], D!] :
V = (X [sorted_index [I-1] D] + X [sorted_index [I], D]) / 2
x_l, x_r, y_l, y_r = 스플릿 (X, Y, D, V)
E = 엔트로피 (y_l ) + 엔트로피 (y_r)
만약 E <best_entropy :
best_entropy, best_d, best_v = E, D, V
, best_entropy 반환 best_d, best_v
인쇄 (try_spit (X, Y))
best_entropy = try_spit (X, Y) [0]
best_d = try_spit (x, y)는 [1]
best_v = try_spit (X, Y) [2]
x_l, x_r, y_l, y_r = 스플릿 (X, Y, best_d, best_v)
인쇄 (엔트로피 (y_l))
프린트 (엔트로피 (y_r ))
#基尼系数方式构建决策树的代码实现
sklearn.tree 수입 DecisionTreeClassifier에서
DT2 = DecisionTreeClassifier (MAX_DEPTH = 2 기준 = "지니") #决策树的分类定义器相关决策超参数
dt2.fit (X, Y)
plot_decision_boundary (DT2 축 = 0.5,8, 0,3])
plt.scatter (X [Y의 == 0,0], [Y == 0], 컬러 = "R") X
plt.scatter (X [1,0 ==의 Y, X를 [Y의 == 1,1-, 컬러 = "g")
plt.scatter (X [Y의 == 2,0], X [Y ==을 2,1, 컬러 = "B")
plt.show ()
DEF 분할 (X, Y, D 값) :
index_a = (X의 [: D] <= 값)
index_b = (X의 [: D]> 값)
[index_b], Y [리턴 X가 [index_a], 여기서 x index_a, Y가 [index_b]
모음 가져올 카운터
DEF 지니 (Y) :
카운터 1 = 카운터 (Y)
입술 = 1.0
Counter1.values NUM에 대한 () :
p = NUM / LEN (V)
A - p = 2 **
RES 반환
: DEF (X, Y) try_spit1
best_gini = 플로트 ( "INF")
best_d, best_v = -1, -1
범위 D 대 (x.shape의 [1.])
sorted_index np.argsort =를 (X의 [를 : D])
. (1, LEN (X) 범위)에서 I 님
! IF X [sorted_index [I- 1.] D =의 X [sorted_index [I], D]
. V = (X [sorted_index [I- 1 ] D] + X [sorted_index [I], D]) / 2
X_L, x_r, Y_L, Y_r = 스플릿 (X, Y, D, V)
G = 지니 (Y_L) + 지니 (Y_r)
IF G <best_gini :
best_gini, best_d, best_v = G, D, V의
창 [best_gini, best_d, best_v]
best_gini, best_d, best_v try_spit1 = (X, Y)
이 전단 (best_gini, best_d, best_v)
# 결정 치기의 수에 대응 의 피팅을 통해 가능한 한 많이 감소로
순이익 등의 수입 NumPy와
PLT 오기 AS matplotlib.pyplot
sklearn 임포트 데이터 집합으로부터
데이터 샘플을 생성하기 위해 디폴트 데이터 # 100 X, Y = datasets.make_moons (노이즈 = 0.25 random_state = 666)
전단 (x.shape)
인쇄 (y.shape)
plt.figure을 ()
plt.scatter (X [Y == 0,0], X [0,1 == Y, 컬러 = "R & LT ')
plt.scatter (X [Y의 == 1,0], X [Y = = 1,1, 컬러 = "G")
plt.show ()
sklearn.tree 오기 DecisionTreeClassifier에서
DT2 = DecisionTreeClassifier (MAX_DEPTH = 2, 10 = min_samples_split, min_samples_leaf =. 6의 max_leaf_nodes =. 4 ), # 기본 케이스 지니 비해 계수, 깊이 원경 지니 계수 0 분주했을
# 슈퍼 트리 메인 파라미터
dt2.fit (X, Y)
- plot_decision_boundary (2,3, -1,1.5] DT2, 축 =)
plt.scatter을 (X [Y == 0,0], X [0,1 == Y, 컬러 = "R & LT ')
plt.scatter (X [Y의 == 1,0], X [1,1 == Y] , 색상 = "G")
PLT.보여 주다()
# 회귀 문제를 해결하기 위해 결정 트리를 사용하여
NP AS NumPy와 가져
오기가 PLT AS matplotlib.pyplot
sklearn 임포트 데이터 집합으로부터
(d = datasets.load_boston)를
X-d.data가 =
y-d.target =
인쇄 (x.shape)
인쇄 (y.shape)를
발 오기 train_test_split의 sklearn.model_selection
x_train, x_test, y_train, android.permission.FACTOR. train_test_split = (X, Y, random_state = 666)
sklearn.tree 오기 DecisionTreeRegressor에서
DR = DecisionTreeRegressor ()
dr.fit (x_train, y_train)
인쇄 (dr.score (x_test , android.permission.FACTOR.))
프린트 (dr.score (x_train, y_train)) # R2 트레이닝 데이터 세트 = 1, 및 테스트 세트는 상대적으로 작고, 따라서 생성 된 overfitting, 학습 곡선이 더 overfitting을 반영 케이스 개폐
파라미터의 상이한 조합에 따라 플롯 # 학습 곡선
sklearn.metrics 오기 mean_squared_error에서
DEF의 plot_learning_curve (너 한테, x_train, x_test, y_train, android.permission.FACTOR한다.)
train_score = []
test_score = []
에 대한 전 범위 (1, LEN (x_train))에서 :
algo.fit (x_train의 [: I] y_train의 [: I])
y_train_pre = algo.predict (x_train의 [: I])
y_test_pre = algo.predict (x_test)
train_score.append (mean_squared_error (y_train [: I] y_train_pre))
test_score.append (mean_squared_error (y_test, y_test_pre))
plt.figure ()
plt.plot ([I 대 전 범위 (1 , 렌 (x_train))] np.sqrt (train_score), "g", 라벨 = "train_error")
), np.sqrt (test_score plt.plot ([내가 범위 (1, LEN (x_train에 대한) ), "R", 라벨 = "test_error")
plt.legend ()
#에 plt.axis ([0, LEN (x_train) +1,0,5])
plt.show ()
plot_learning_curve (DecisionTreeRegressor (MAX_DEPTH = 1) , x_train, x_test, y_train, y_test) #의 단순성과 케이스
plot_learning_curve (DecisionTreeRegressor (MAX_DEPTH = 5) , x_train, x_test, y_train, y_test) # 1 나은 경우 착용감
(DecisionTreeRegressor을 plot_learning_curve을 (MAX_DEPTH = 15) x_train, x_test, y_train, y_test) #에 overfitting 케이스













추천

출처www.cnblogs.com/Yanjy-OnlyOne/p/11372286.html