본문 바로가기
Programming_Collective Intelligence/8.가격모델링

교차검증

by 볼록티 2020. 1. 8.
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

댓글