728x90
반응형
교차검증(cross-validation)은 데이터를 학습 데이터셋과 테스트 데이터셋으로 나누는 기법들을 총칭하는 이름이다. 학습셋은 검증용 알고리즘에 올바른 답으로 주어지는 것이고, 예측을 하는데 사용된다. 그런다음 테스트 셋에 있는 각 물품들에 대해 예측하고 정답과 비교해서 이 알고리즘이 얼마나 잘 동작했는지를 나타내는 전체 점수를 계산한다.
대체도 95대 5정도로 하는데, 아래의 함수도 95%를 학습데이터로 사용하고, 5%를 검증용데이터로 사용하기위해 데이터를 나누는 함수를 작성한다.
def dividedata(data, test=0.05):
trainset=[]
testset=[]
for row in data:
if random() < test:
testset.append(row)
else:
trainset.append(row)
return trainset, testset
다음 단계로 학습 셋을 제공하고, 테스트 셋 내 물품들로 호출해서 알고리즘을 테스트한다. 아래의 함수는 차이를 계산하고 결합하여 얼마나 떨어져 있는지를 알려주는 누적점수를 계산한다. 누적점수는 보통 모든 차이 값의 제곱을 더하여 계산한다.
def testalgorithm(algf, trainset, testset):
error=0.0
for row in testset:
guess=algf(trainset, row['input'])
error+=(row['result']-guess) ** 2
return error/len(testset)
마지막 단계로 데이터를 다양하게 분할한 후 각각에 대해 testalgorithm을 수행시키고, 모든 결과를 더해 최종 결과 점수를 만드는 함수를 만든다.
def crossvalidation(algf, data, trials=100,test=0.05):
error=0.0
for i in range(trials):
trainset, testset = dividedata(data,test)
error+=testalgorithm(algf, trainset, testset)
return error/trials
crossvalidation(knnestimate, data)
#결과: 402.974577
728x90
반응형
'Programming_Collective Intelligence > 8.가격모델링' 카테고리의 다른 글
kNN + 가중치 (0) | 2020.01.07 |
---|---|
kNN을 활용한 가격 추정 (0) | 2020.01.07 |
예제 데이터 셋 생성 (0) | 2020.01.07 |
댓글