randomForest 사용해보기
2018. 4. 25. 02:47ㆍPython-이론/python-인공지능
randomForest 사용하기
randomForest는 레오 브라이만이 제안한 딥러닝 알고리즘입니다. 주로 회귀와 클러스터링, 분류를 구현하는데 유용합니다. 구조는 데이터들이 입력되는데 데이터들을 무작위로 샘플링하여서 여러개의 의사결정 트리들이 만들어집니다. 각 트리마다 답을 산출하는데 산출한 답을 종합하여 결과를 내놓습니다. 여러개의 트리로 답을 산출하니깐 결과의 정확도가 높습니다.
randomForest의 구조
버섯 예제1
버섯예제 데이터
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier as forest from sklearn import metrics csvFile = pd.read_csv('mushroom.csv',header=None) label = [] data = [] for idx, value in csvFile.iterrows(): label.append(value.ix[0]) dataList = [] for v in value.ix[1:]: dataList.append(ord(v)) data.append(dataList) trainData, testData,trainLabel,testLabel = train_test_split(data,label) clf = forest() clf.fit(trainData,trainLabel) pre = clf.predict(testData) report = metrics.classification_report(pre,testLabel) print(report)
하지만 위와 같은 코드는 문자 하나로만 설명이되어 있어서 다행인데 만약에 '초록':1, '빨강':2, '주황':3로 되어있으면 데이터의 값이 비슷하고 2배 3배씩 하면 데이터들이 충돌 할 수 있는 가능성도 있다. 따라서 이런문제를 발생시키지 않기 위해선 초록 은 [1, 0, 0, 0], 빨강은 [0, 1, 0, 0], 주황은 [0,0,1,0] 이런식으로 데이터를 정하면 값이 겹칠일이 없어진다. 위의 코드를 이런 식으로 바꾸어 보겠다
import pandas as pd from sklearn import metrics from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier as forest csvFile = pd.read_csv('mushroom.csv',header=None) data = [] label = [] attrLines =[] for csv_length,value in csvFile.iterrows(): label.append(value.ix[0]) exdata = [] for num,v in enumerate(value.ix[1:]): if csv_length == 0: attr = {'dic':{},'cnt':0} attrLines.append(attr) else: attr = attrLines[num] d = [0,0,0,0,0,0,0,0,0,0,0,0] if v not in attr['dic']: idx = attr['cnt'] attr['dic'][v]= idx attr['cnt'] += 1 else : idx = attr['dic'][v] d[idx] = 1 exdata += d data.append(exdata) trainData, testData, trainLabel, testLabel = train_test_split(data,label) clf = forest() clf.fit(trainData,trainLabel) pre = clf.predict(testData) report = metrics.classification_report(pre,testLabel) print(report)
이코드는 조금 이해하기 어려웠다. 처음은 라벨값을 구해주고 그다음부터가 시작이다. 처음반복문 돌때 csv파일 한줄의 각각의 데이터마다 딕셔너리를 만들어준다. 그다음 딕셔너리에 그버섯이 갖는 특징 들을 등록함으로 서 2번째 데이터의 특징을 [0,0,0,0,0,0,0,0,0]에 등록해준다. 다음에 같은 특징이 나왔을 때도 그 값의 인덱스 숫자만 뽑아와서 다시 배열에 등록해준다. 배열들을 끝에서는 모두 합쳐서 입력할 데이터를 만들어준다.
'Python-이론 > python-인공지능' 카테고리의 다른 글
텐서플로우로 머신러닝 하기(bmi 구하기) (0) | 2018.05.08 |
---|---|
데이터 검증하기-cross-validation, grid-search (0) | 2018.04.25 |
machineLearning의 svm이 무엇이고 직접 그래프로 구분짓기 (0) | 2018.04.22 |
machine Learning을 웹에 적용시키기 (0) | 2018.04.22 |
machine Learning결과로 그래프 만들기 (0) | 2018.04.22 |