랜덤 포레스트를 써봤어요.

9222 단어 PythonPython3

이번 목적


SIGNATE의 Practice, 포도주 품종을 예측합니다.

본론


사용 학습 알고리즘

  • SVC
  • 논리 회귀
  • RandomForest(랜덤 숲)
  • 3개의 알고리즘을 시험한 결과 무작위 삼림의 정밀도가 가장 높아 최종 분류기로 채택되었다.

    코드


    데이터 가져오기


    wine-learning.py
    wine_data = pd.read_csv('train.tsv',sep='\t')
    wine_test = pd.read_csv('test.tsv',sep='\t')
    
    지난번에 사용read_table했는데 드문 기회라서 사용해 봤습니다read_csv.나는 테이블이 더 편하다고 생각한다.
    그나저나 어떤 호출 방법도 똑같기 때문에 정확한 것은 없다.

    특징량 데이터와 교사 데이터의 분리


    wine-learning.py
    X = wine_data.loc[:,['Alcohol','Malic acid','Ash','Alcalinity of ash','Magnesium','Total phenols','Flavanoids','Nonflavanoid ohenols','Proanthocyanins','Color intensity','Hue','OD280/OD315 of diluted wines','Proline']].values
    y = wine_data.loc[:,'Y'].values
    
    변수가 많으면 길어지기 쉬우므로 이 문제를 해결하려고 한다.다음 과제에 개선할 수 있는 방법이 있는지 연구하다.
    참고로 여기서도 테스트 데이터를 하고 있습니다.
    wine-learning.py
    Xt = wine_test.loc[:,['Alcohol','Malic acid','Ash','Alcalinity of ash','Magnesium','Total phenols','Flavanoids','Nonflavanoid ohenols','Proanthocyanins','Color intensity','Hue','OD280/OD315 of diluted wines','Proline']].values
    

    학습 데이터와 테스트 데이터로 분할


    wine-learning.py
    X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2)
    
    이번에도 데이터를 8:2의 비율로 분할했다.

    누락된 값 삭제


    wine-learning.py
    X_train = X_train[:, ~np.isnan(X_train).any(axis=0)]
    X_test = X_test[:, ~np.isnan(X_test).any(axis=0)]
    Xt = Xt[:, ~np.isnan(Xt).any(axis=0)]
    
    분할 전에 없는 결손치가 갑자기 나타났다.이유를 몰라서 며칠 후에 검증하고 싶어요.
    이번에 결손치를 삭제하는 방침을 세웠다.

    학습 모형


    SVC
    wine-learning.py
    clf = svm.SVC()
    clf.fit(X_train, y_train)
    
    논리 회귀
    wine-learning.py
    clf = LogisticRegression()
    clf.fit(X_train, y_train)
    
    랜덤 숲
    wine-learning.py
    clf = RandomForestClassifier(n_estimators=500, random_state=0)
    clf.fit(X_train, y_train)
    
    random_state 0,nuestimators(결정 트리의 개수)는 500을 더 설정합니다.

    평가 모델


    wine-learning.py
    y_pred = clf.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    print('正解率 = ' , accuracy)
    
    예를 들어 accuracy 함수를 사용하여 정확한 확률을 얻는다.
    SVC 정확도
    正解率 =  0.6111111111111112
    
    논리 회귀 정확도
    正解率 =  0.8888888888888888
    
    무작위 삼림 정확도
    正解率 =  1.0
    

    분류


    wine-learning.py
    X_pred = np.array(Xt)
    y_pred = clf.predict(X_pred)
    print(y_pred)
    

    결과



    했어요 (페치페치)

    고려 사항

  • 변수의 양에 따라 학습 알고리즘을 바꾼다.
  • 변수의 수량(비 삭제)을 낮추는 작업을 한 후 학습 알고리즘을 응용한다.
  • 최초의 알고리즘의 특성을 이해한다.
  • 데이터 분할 시간에 발생하는 결손치의 원인 추궁
  • 혼합 매트릭스 사용
  • 좋은 웹페이지 즐겨찾기