Python 기계 학습 의 결정 트 리 와 랜 덤 숲

의사 결정 트 리 란 무엇 인가
의사 결정 트 리 는 전형 적 인 10 대 데이터 발굴 알고리즘 중 하나 로 절차 그림 과 유사 한 수 형 구 조 를 통 해 그 규칙 은 바로 iIF...THEN..의 사상 이다.수치 형 은 변수의 예측 이나 이산 형 인 변수의 분류 에 사용 할 수 있다.이 알고리즘 은 간단 하고 직관 적 이 며 이해 하기 쉬 우 며 연구자 가 그 어떠한 분야 의 지식 이나 복잡 한 수학 논 리 를 파악 할 필요 가 없다.또한 알고리즘 의 출력 결 과 는 매우 강 한 해석 성 을 가진다.일반적인 상황 에서 결정 술 을 분류 기로 사용 하면 예측 정확도 가 높 아 지고 현재 점점 더 많은 업계 에서 이 알고리즘 을 실제 문제 의 해결 에 사용한다.
결정 트 리 구성
在这里插入图片描述
이것 은 전형 적 인 결정 트 리 로 글자 의 꼭대기 에서 아래로 자 라 는 과정 을 나타 낸다.나무 구 조 를 통 해 데이터 에 숨겨 진 규칙 을 직관 적 으로 표현 할 수 있다.그림 에서 짙 은 색 의 타원 은 나무의 뿌리 노드 가 타원 은 나무의 중간 노드 를 나타 내 고 사각형 은 수의 잎 노드 를 나타 내 며 모든 비 잎 노드 에 대해 조건 판단 에 사용 된다.잎 노드 는 최종 저장 의 분류 결 과 를 나타 낸다.
4.567917.뿌리 노드:가장자리 에 들 어가 지 않 고 가장자리 가 있다.최초의 특징 에 대한 질문 을 포함 합 니 다4.567917.중간 노드:들 어 가 는 쪽 도 있 고 나 가 는 쪽 도 있 으 며 들 어 가 는 쪽 은 하나 밖 에 없고 나 가 는 쪽 은 여러 개 있 을 수 있다.모두 특징 에 대한 질문 이다4.567917.잎 노드:가장자리 가 있 고 가장자리 가 나 오지 않 으 며 모든 잎 노드 는 하나의 유형 라벨 이다4.567917.서브 노드 와 부모 노드:두 개의 연 결 된 노드 에서 뿌리 노드 에 가 까 운 것 은 부모 노드 이 고 다른 하 나 는 서브 노드 이다노드 의 확정 방법
그러면 모든 비 잎 노드 의 필드 에 대한 선택 은 우리 가 분류 한 결과 의 좋 고 나 쁨 을 직접적 으로 결정 할 수 있다.그러면 이런 비 잎 노드 의 분 류 를 어떻게 하면 결 과 를 더욱 좋 고 효율 적 으로 할 수 있 는 지,즉 우리 가 말 한 정제 도,정제 도 에 대한 평가 에 있어 우 리 는 세 가지 기준 정보 이득,정보 이득 율 과 지 니 계 수 를 평가 할 수 있다.
4.567917.정보 이득 에 있어 우리 가 분류 하 는 과정 에서 모든 분류 조건 의 결과 에 대해 정보 이득 량 의 계산 을 할 것 이다.그리고 정보 이득 의 비 교 를 통 해 가장 큰 정보 이득 에 대응 하 는 분류 조건 을 추출 합 니 다.즉,정보 이득 치 에 대한 가장 큰 양은 우리 가 찾 는 가장 좋 은 분류 조건 이다.정보 이득 치 를 어떻게 계산 하 는 지 에 대해 서 는 많은 설명 을 하지 않 습 니 다.왜냐하면 이것 은 대량의 수학 계산 과 확률 지식 을 바탕 으로 해 야 하기 때 문 입 니 다.)"entropy"를 입력 하고 정보 엔트로피(Entropy)를 사용 합 니 다4.567917.정보 이득 을 계산 하 는 과정 에서 데이터 세트 유형 별 효과 가 서로 다른 값 을 받 을 수 있 기 때문에 정보 이득 의 계산 결과 가 더욱 클 수 있 지만 가끔 은 우리 데이터 세트 의 분류 효 과 를 진정 으로 나타 내지 못 하기 때문에 여기 서 정보 이득 율 을 도입 하여 정보 이득 값 에 대해 어느 정도 처벌 을 한다.간단 한 이 해 는 정보 이득 치 를 정 보 량 으로 나 누 는 것 이다4.567917.의사 결정 트 리 중의 정보 이득 율 과 정보 이득 기준 은 뿌리 노드 와 중간 노드 의 선택 을 실현 하고 이산 형 랜 덤 변 수 를 분류 할 수 밖 에 없다.연속 적 인 인 인 변 수 는 속수무책 이다.의사 결정 수가 연속 적 인 인 인 변 수 를 예측 할 수 있 도록 지 니 계수 기준 을 도입 하여 필드 선택 특징 을 한다."gini"를 입력 하고 지 니 계수(Gini Impurity)를 사용 하 십시오지 니 계수 에 비해 정보 엔 트로피 는 순도 에 민감 하고 순도 에 대한 징벌 이 가장 강하 다.그러나 실제 사용 에서 정보 엔트로피 와 지 니 계수 의 효 과 는 대체적으로 같다.정보 엔트로피 의 계산 은 비키니 계수 가 좀 느리다.왜냐하면 지 니 계수 의 계산 은 대수 와 관련 이 없 기 때문이다.또한 정보 엔트로피 는 순도 에 더욱 민감 하기 때문에 정보 엔트로피 를 기준 으로 할 때 결정 트 리 의 성장 이 더욱'정교 하 다'.따라서 고 차원 데이터 나 소음 이 많은 데이터 에 대해 정보 엔트로피 는 쉽게 적합 하고 지 니 계 수 는 이런 상황 에서 효과 가 비교적 좋다.
의사 결정 트 리 기본 절차
在这里插入图片描述
그 는 더 이상 사용 할 수 있 는 특징 이 없 거나 전체적인 순도 지표 가 가장 좋 을 때 까지 과정 을 순환 할 것 이다.결정 나 무 는 성장 을 멈 출 것 이다.그러나 모델 링 을 하 는 과정 에서 이런 높 은 정밀도 의 훈련 으로 인해 모델 은 훈련 을 바탕 으로 높 은 예측 정밀도 가 있 을 수 있 지만 테스트 집합 에서 효과 가 이상 적 이지 않 고 적합 한 문 제 를 해결 하기 위해 결정 트 리 에 대해 가지치기 작업 을 한다.
결정 트 리 의 가지치기 작업 은 세 가지 가 있 습 니 다.오차 가 가지치기 법 을 낮 추고 비관 적 인 가지치기 법,대가 복잡 도 가지치기 법 입 니 다.그러나 여기 서 우 리 는 sklearn 에서 우리 에 게 제공 하 는 결정 트 리 의 성장 을 제한 하 는 매개 변수 만 언급 합 니 다.
의사 결정 트 리 의 상용 매개 변수

DecisionTreeClassifier(criterion="gini"
								# criterion               。         gini,                     。  “entropy”,       ,      
								#        ,  “mse”,                 。
                                ,random_state=None
                                #              ,  None             。
                                ,splitter="best"
                                #                 ,  best                 ,
                                #     random,         
                                
                                #           
                                ,max_depth=None
                                #             ,  None,                   。
                                ,min_samples_leaf=1
                                #                 1。
                                ,min_samples_split=2
                                #                            2。
                                ,max_features=None
                                #                  ,  None            。        ,             ,   0~1    ,               。
                                ,min_impurity_decrease=0
                                #                    ,   0
                                ,class_weight=None
                                #                。  None            。
                                )
코드 구현 결정 트 리 분류 트 리

import pandas as pd
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_wine
import graphviz
#       ,     
wine=load_wine()
datatarget=pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
#                       。
xtrain,xtest,ytrain,ytest=train_test_split(wine.data #       。
											,wine.target#      。
											,test_size=0.3#      70%    30%。
											)
								
#         。			
clf=tree.DecisionTreeClassifier(criterion="gini") #               ,        
#                ,clf          ,            。
clf=clf.fit(xtrain,ytrain)

#               ,                  ,                score      
clf.score(xtest,ytest)#     
#             ,              。
cross_val_score(clf #          。
				,wine.data#       
				,wine.target#        。
				,cv=10#        
				#,scoring="neg_mean_squared_error"
		#          ,            
		).mean()

#              
dot=tree.export_graphviz(clf
                         #,feature_names    #   
                         #,class_names  #   
                         ,filled=True#      
                         ,rounded=True)#    
graph=graphviz.Source(dot)

#          
clf.feature_importances_
#[*zip(wine.feature_name,clf.feature_importances_)]         

#apply                  
clf.apply(Xtest)
#predict           /    
clf.predict(Xtest)
의사 결정 트 리 다른 maxdepth 의 학습 곡선

from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_wine
import matplotlib.pyplot as plt、

wine=load_wine()
xtrain,xtest,ytrain,ytest=train_test_split(wine.data,wine.target,test_size=0.3)
trainscore=[]
testscore=[]
for i in range(10):
    clf=tree.DecisionTreeClassifier(criterion="gini"
                                    ,random_state=0
                                    ,max_depth=i+1
                                    ,min_samples_split=5
                                    ,max_features=5
                                    ).fit(xtrain,ytrain)

	#                  。 2     ,     
    once1=clf.score(xtrain,ytrain)
    once2=cross_val_score(clf,wine.data,wine.target,cv=10).mean()#   clf.score(xtest,ytest)

    trainscore.append(once1)
    testscore.append(once2)

#   
plt.plot(range(1,11),trainscore,color="red",label="train")
plt.plot(range(1,11),testscore,color="blue",label="test")
#    
plt.xticks(range(1,11))
plt.legend()
plt.show()

result:
在这里插入图片描述
일반적인 상황 에서 maxdepth 의 상승 훈련 집 과 테스트 집의 점 수 는 상대 적 으로 높 지만 와인 데이터 집의 데이터 양 이 비교적 적기 때문에 특별히 뚜렷하게 나타 나 지 않 았 다.그러나 우 리 는 여전히 최대 깊이 가 4 일 때 테스트 급 의 효과 절정 에 이 르 렀 음 을 알 수 있다.
격자 검색 분류 트 리 에서 의 응용
우 리 는 이 모델 에 대한 매개 변수 가 비교적 많다 는 것 을 발견 했다.만약 에 우리 가 상대 적 으로 점수 가 비교적 높 은 효과 가 좋 은 모델 을 얻 으 려 면 우 리 는 모든 매개 변수 에 대해 끊임없이 순환 하고 옮 겨 다 녀 야 마지막 에 가장 좋 은 답 을 얻 을 수 있다.그러나 이것 은 우리 가 인위적으로 실현 하 는 데 비교적 어렵 기 때문에 우 리 는 이러한 도 구 를 가지 게 되 었 다.격자 검색 은 가장 좋 은 효 과 를 자동 으로 실현 할 수 있 는 각종 매개 변수의 확정 이다.하지만 시간 이 많이 걸린다)

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_wine
from sklearn.model_selection import GridSearchCV #        
wine = load_wine()
xtrain, xtest, ytrain, ytest = train_test_split(wine.data, wine.target, test_size=0.3)
clf = DecisionTreeClassifier(random_state=0)  #   random_state,                 

# parameters          ,          。           ,      
parameters = {"criterion": ["gini", "entropy"]
    , "splitter": ["best", "random"]
    , "max_depth": [*range(1, 10)]
              # ,"min_samples_leaf":[*range(5,10)]
              }
#           ,        ,          cv     
GS = GridSearchCV(clf, cv=10, param_grid=parameters)
#       
gs = GS.fit(xtrain, ytrain)

# best_params_          
#     ,(     ,             )
best_choice = gs.best_params_
print(best_choice)

# best_score_             
best_score = gs.best_score_
print(best_score)

회귀 트 리 중 다른 maxdepth 의합 사인 함수 데이터

import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt

#          
rng = np.random.RandomState(0)
# rng.rand(80, 1) 0 1    80  ,axis=0,         
X = np.sort(5 * rng.rand(80, 1), axis=0)
#       
y = np.sin(X).ravel()
#     
y[::5] += 3 * (0.5 - rng.rand(16))

#       ,     criterion          
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
#     
regr_1.fit(X, y)
regr_2.fit(X, y)

#       
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
#   X_test          
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)

#  
plt.figure()
plt.scatter(X, y, s=20, edgecolor="black",
            c="red", label="data")
plt.plot(X_test, y_1, color="blue",
         label="max_depth=2", linewidth=2)
plt.plot(X_test, y_2, color="green", label="max_depth=5", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()
결과:
在这里插入图片描述
이미지 에서 알 수 있 듯 이 서로 다른 깊이 의 노드 에 있어 장점 과 단점 이 있다.maxdepth=5 의 경우 일반적인 상황 에서 원래 의 데이터 결과 와 가 깝 지만 일부 특수 한 소음 에 있어 소음 과 매우 가 깝 기 때문에 개별 점 에서 실제 데이터 와 차이 가 비교적 크다.즉,과 의합 현상(훈련 데이터 세트 에 대해 잘 판단 할 수 있 지만 테스트 데이터 세트 에 있어 결 과 는 이상 적 이지 않다)이다.maxdepth=2 일 때 대량의 데이터 세트 에 특별히 접근 할 수 는 없 지만 일부 소음 을 처리 할 때 잘 피 할 수 있 습 니 다.
분류 트 리 가 데 이 터 를 합성 하 는 표현

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_moons, make_circles, make_classification
from sklearn.tree import DecisionTreeClassifier

######       ######
#       
X, y = make_classification(n_samples=100, #  100   
 n_features=2,#     
 n_redundant=0, #      0 
 n_informative=2, #        2 
 random_state=1,#    1
n_clusters_per_class=1 #            1 
 )
rng = np.random.RandomState(2) #        
X += 2 * rng.uniform(size=X.shape) #  0~1      
linearly_separable = (X, y) #     X,                  
#plt.scatter(X[:,0],X[:,1])

# make_moons       ,make_circles      ,              datasets 
moons=make_moons(noise=0.3, random_state=0)
circles=make_circles(noise=0.2, factor=0.5, random_state=1)
datasets = [moons,circles,linearly_separable]


figure = plt.figure(figsize=(6, 9))
i=1
#                 i i = 1
#      , datasets      for  
for ds_index, ds in enumerate(datasets):
    X, y = ds
    #           
    X = StandardScaler().fit_transform(X)
    #     
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4,
random_state=42)

    #     ,             
    #  X[:,0]    ,X[:,1]    
    x1_min, x1_max = X[:, 0].min() - .5, X[:, 0].max() + .5
    x2_min, x2_max = X[:, 1].min() - .5, X[:, 1].max() + .5

    #              (   0.2   ),array1     ,array2     
    array1,array2 = np.meshgrid(np.arange(x1_min, x1_max, 0.2), np.arange(x2_min, x2_max, 0.2))
    #     
    cm_bright = ListedColormap(['#FF0000', '#0000FF'])

##########          #########

    #           (3,2)  i 
    ax = plt.subplot(len(datasets), 2, i)

    #     
    if ds_index == 0:
        ax.set_title("Input data")

    #          
    ax.scatter(X_train[:, 0],#   
               X_train[:, 1],#   
               c=y_train,#     y_train   cm_bright            ,               。
               cmap = cm_bright, #    
               edgecolors = 'k'#     ,         
               )
    #           ,        alpha = 0.4  ,        
    ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test,cmap = cm_bright, alpha = 0.4, edgecolors = 'k')
    #       
    ax.set_xlim(array1.min(), array1.max())
    ax.set_ylim(array2.min(), array2.max())
    #      
    ax.set_xticks(())
    ax.set_yticks(())

    #i+1            
    i += 1

#######           #######
    ax = plt.subplot(len(datasets), 2, i)
    #       
    clf = DecisionTreeClassifier(max_depth=5).fit(X_train, y_train)
    score = clf.score(X_test, y_test)

    # np.c_               
    # ravel()                
    #                      ,       ,             
    Z = clf.predict(np.c_[array1.ravel(), array2.ravel()])
    Z = Z.reshape(array1.shape)
    cm = plt.cm.RdBu #             。
    ax.contourf(array1#     。
                , array2#     
                , Z#            m,            。
                , cmap=cm#        ,  Z      ,           ,      ,       
                , alpha=0.8
                )
    #        ,               
    ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright, edgecolors = 'k')
    ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright, edgecolors = 'k', alpha = 0.4)
    ax.set_xlim(array1.min(), array1.max())
    ax.set_ylim(array2.min(), array2.max())
    ax.set_xticks(())
    ax.set_yticks(())

    if ds_index == 0:
        ax.set_title("Decision Tree")

    #           
    ax.text(array1.max() - .3, array2.min() + .3, ('{:.1f}%'.format(score * 100)),
    size = 15, horizontalalignment = 'right')
    i += 1

#                 
plt.tight_layout()
plt.show()
在这里插入图片描述
여기 서 알 수 있 듯 이 결정 트 리 는 달 형 데이터 와 이 분류 데이터 에 대해 비교적 좋 은 분류 효과 가 있 지만 고리 형 데이터 에 대한 분류 효 과 는 그리 이상 적 이지 않다.
랜 덤 숲 이란 무엇 인가?
랜 덤 숲 은 집적 알고리즘 에 속 합 니 다.숲 은 글자 그대로 여러 개의 결정 트 리 로 구 성 된 집합 입 니 다.그리고 이런 서브 트 리 는 모두 충분히 자 라 는 CART 나무 이 고 랜 덤 으로 여러 개의 랜 덤 트 리 를 구성 하 는 것 은 랜 덤 으로 생 성 된 것 임 을 나타 냅 니 다.생 성 과정 은 bossstrap 표본 추출 법 을 사용 합 니 다.이 알고리즘 은 두 가지 장점 이 있 습 니 다.하 나 는 운행 속도 가 빠 르 고 다른 하 나 는 예측 정확도 가 높 습 니 다.가장 좋 은 알고리즘 중의 하나 로 불 린 다.
랜 덤 숲 의 원리
이 알고리즘 의 핵심 사상 은 여러 그루 의 결정 트 리 의 투표 체 제 를 이용 하여 분류 나 예측 문 제 를 해결 하 는 것 이다.분류의 문제 에 대해 서 는 복수 의 판단 결 과 를 투표 용 으로 활용 하고,소수 가 다수 에 복종 한 다 는 원칙 에 따라 최종 적 으로 표본 이 속 한 유형 을 확정 하고,예측 적 인 문제 에 대해 서 는 여러 그루 나무의 회귀 결 과 를 평균 해 최종 적 으로 표본 의 예측 을 확정한다.
무 작위 숲 의 모델 링 과정 을 형상 적 으로 묘사 하 는 것 이 바로 이렇다.
在这里插入图片描述
흐름:
4.567917.booststrap 표본 추출 법 을 이용 하여 원시 데이터 에서 K 개의 데이터 세트 를 집중 적 으로 생 성 하고 모든 데이터 세트 는 N 개의 관측 과 P 개의 독립 변 수 를 포함한다
  • 모든 데이터 세트 에 대해 하나의 CART 결정 트 리 를 구성 하고 구조 수의 과정 에서 모든 독립 변 수 를 노드 필드 의 선택 으로 사용 하지 않 고 P 개의 필드(특징)를 무 작위 로 선택한다
  • 4.567917.모든 결정 나 무 를 가능 한 한 충분히 자라 게 하고 나무의 모든 노드 를 가능 한 한 깨끗 하 게 한다.즉,무 작위 숲 속 의 모든 자 나 무 는 가 지 를 자 를 필요 가 없다4.567917.K 개 CART 나무의 랜 덤 숲 에 대해 분류 문제 에 대해 서 는 투표 법 을 이용 하여 가장 높 은 표 의 유형 을 최종 판단 결과 에 사용 하고 회귀 문제 에 대해 서 는 평균치 법 을 이용 하여 이 를 예측 견본 의 최종 결과 로 한다.
    무 작위 삼림 상용 매개 변수
    분 류 된 랜 덤 숲 으로 예 를 들 면
    
    RandomForestClassifier(n_estimators=10 #                    
    						,criterion="gini" #                    。        。
    						,max_depth=None #             ,          。
    						,min_samples_split=2 #                               ,  2。
    						,min_samples_leaf=1 #                    ,   1
    						,max_features="auto" #                    (   )  None。             
    						,bootstrap=True # #        (     ,      )    ,      train test   ,  True
    						,oob_score=False # #                        ,     false,         bootstrap           
    						,random_state=None #              ,  None,         
    						,calss_weight #            ,          
    						)
     :  n_estimators  ,         。     ,          
    n_estimators         ,                   
      n_estimators  ,            ,           
    
    무 작위 삼림 응용 예시
    
    from sklearn.datasets import load_wine
    from sklearn.ensemble import RandomForestClassifier
    wine=load_wine()
    xtrain,xtest,ytrain,ytest=train_test_split(wine.data ,wine.target,test_size=0.3)
    rfc=RandomForestClassifier(random_state=0
                              ,n_estimators=10#      
                              ,bootstrap=True
                              ,oob_score=True#        
                               ).fit(xtrain,ytrain)
    rfc.score(xtest,ytest)
    rfc.oob_score_#           
    rfc.predict_proba(wine.data)#       target    
    rfc.estimators_#     
    rfc.estimators_[1].random_state#   random――state 
    
    매개 변수 nestimators 가 랜 덤 숲 에 미 친 영향
    
    from sklearn.model_selection import cross_val_score
    import matplotlib.pyplot as plt
    from sklearn.datasets import load_wine
    from sklearn.ensemble import RandomForestClassifier
    wine=load_wine()
    score=[]
    for i in range(100):
        rfc=RandomForestClassifier(random_state=0
                                  ,n_estimators=i+1
                                  ,bootstrap=True
                                  ,oob_score=False
                                   )
        once=cross_val_score(rfc,wine.data,wine.target,cv=10).mean()
        score.append(once)
        
    plt.plot(range(1,101),score)
    plt.xlabel("n_estimators")
    plt.show()
    print("best srore = ",max(score),"
    best n_estimators = ",score.index(max(score))+1)
    출력:
    best srore = 0.9833333333333334
    best n_estimators = 12
    在这里插入图片描述
    결정 트 리 와 랜 덤 숲 효과
    
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.model_selection import cross_val_score
    import matplotlib.pyplot as plt
    from sklearn.datasets import load_wine
    from sklearn.ensemble import RandomForestClassifier
    wine=load_wine()
    score1=[]
    score2=[]
    for i in range(10):
        rfc=RandomForestClassifier(n_estimators=12)
        once1=cross_val_score(rfc,wine.data,wine.target,cv=10).mean()
        score1.append(once1)
        clf=DecisionTreeClassifier()
        once2=cross_val_score(clf,wine.data,wine.target,cv=10).mean()
        score2.append(once2)
    plt.plot(range(1,11),score1,label="Forest")
    plt.plot(range(1,11),score2,label="singe tree")
    plt.legend()
    plt.show()
    
    在这里插入图片描述
    이미지 에서 직관 적 으로 볼 수 있 듯 이 여러 개의 결정 트 리 로 구 성 된 랜 덤 삼림 집적 알고리즘 의 모델 효 과 는 하나의 결정 트 리 의 효과 보다 현저히 우수 하 다.
    예 를 들 어 랜 덤 숲 으로 유방암 데 이 터 를 조절 하 는 것 이다.
    n_estimators
    
    from sklearn.datasets import load_breast_cancer
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import cross_val_score
    import matplotlib.pyplot as plt
    cancer = load_breast_cancer()
    scores=[]
    for i in range(1,201,10):
        rfc = RandomForestClassifier(n_estimators=i, random_state=0).fit(cancer.data,cancer.target)
        score = cross_val_score(rfc,cancer.data,cancer.target,cv=10).mean()
        scores.append(score)
    print(max(scores),(scores.index(max(scores))*10)+1)
    plt.figure(figsize=[20,5])
    plt.plot(range(1,201,10),scores)
    plt.show()
    
    
    0.9649122807017545 111
    在这里插入图片描述
    max_depth
    
    from sklearn.datasets import load_breast_cancer
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import cross_val_score
    import matplotlib.pyplot as plt
    cancer = load_breast_cancer()
    scores=[]
    for i in range(1,20,2):
        rfc = RandomForestClassifier(n_estimators=111,max_depth=i, random_state=0)
        score = cross_val_score(rfc,cancer.data,cancer.target,cv=10).mean()
        scores.append(score)
    print(max(scores),(scores.index(max(scores))*2)+1)
    plt.figure(figsize=[20,5])
    plt.plot(range(1,20,2),scores)
    plt.show()
    
    0.9649122807017545 11
    在这里插入图片描述
    gini 에서 entropy 로 변경
    
    from sklearn.datasets import load_breast_cancer
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import cross_val_score
    import matplotlib.pyplot as plt
    cancer = load_breast_cancer()
    scores=[]
    for i in range(1,20,2):
        rfc = RandomForestClassifier(n_estimators=111,criterion="entropy",max_depth=i, random_state=0)
        score = cross_val_score(rfc,cancer.data,cancer.target,cv=10).mean()
        scores.append(score)
    print(max(scores),(scores.index(max(scores))*2)+1)
    plt.figure(figsize=[20,5])
    plt.plot(range(1,20,2),scores)
    plt.show()
    
    0.9666666666666666 7
    在这里插入图片描述
    gini 와 entropy 결과 그림:
    在这里插入图片描述
    파 이 썬 기계 학습 의 결정 트 리 와 랜 덤 숲 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 결정 트 리 와 랜 덤 숲 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기