단단한 머신러닝
[단단한 머신러닝 - 연습문제 참고 답안]Chapter6 - 서포트 벡터 머신 6.3
DataMayno
2021. 8. 24. 10:04
728x90
6.3 두 개의 UCI 데이터 세트를 선택하여 선형 커널과 가우스 커널을 사용하여 SVM을 훈련하고 BP 신경망, C4.5 의사결정 트리와 비교하라.
BP 결과는 연습문제 5.6 참조
C4.5 결과는 연습문제 4.6 참조
import pandas as pd
from sklearn import svm
from sklearn import metrics
names = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
def loadData(filename):
dataSet = pd.read_csv(filename, names=names)
return dataSet
# 데이터세트 분리
def processData(dataSet, n=10):
values = ['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']
classifications = []
gaps = []
for value in values:
temp = dataSet.loc[dataSet['class']==value]
classifications.append(temp)
gap = temp.shape[0]//n
gaps.append(gap)
D = [None for _ in range(n)]
for a in range(n):
for gap, classification in zip(gaps, classifications):
begin = a * gap
#print(classification[begin:begin+gap])
if type(D[a]).__name__ == 'NoneType':
D[a] = classification[begin:begin+gap]
else:
D[a] = D[a].append(classification[begin:begin+gap])
#print(type(D[a]))
#print(classification[begin:begin+gap])
return D
def run(data_train, data_test, kernel='rbf'):
train_data, train_target = data_train[names[:-1]], data_train[names[-1]]
test_data, test_target = data_test[names[:-1]], data_test[names[-1]]
# SVC() 조정
'''
kernel: 디폴트는 ‘rbf’
선택 가능한 커널 함수:
‘linear’:선형 커널
‘poly’:다항식 커널
‘rbf’:가우스 커널
‘sigmod’:sigmod커널 함수
‘precomputed’:미리 계산된 값 사용
'''
clf = svm.SVC(kernel=kernel)
# fit()훈련
clf = clf.fit(train_data, train_target)
predict_target = clf.predict(test_data)
# Accuracy
acc = metrics.accuracy_score(test_target, predict_target)
print('Accuracy:', acc)
if __name__ == '__main__':
filename = '../UCI/iris/iris.data'
dataSet = loadData(filename)
D = processData(dataSet, 3)
data_train, data_test = D[0].append(D[1]), D[2]
kinds = ['linear', 'rbf']
for kind in kinds:
print(kind, end=' ')
run(data_train, data_test, kind)