My pool table set for 9-ballMy pool table set for 9-ballMy pool table set for 9-ballMy pool table set for 9-ball9볼용 당구대 세트 ~ 안에 이전 게시물 , 기계 학습의 정의와 여부에 대해 논의했습니다. JMP 합니다(예, 그렇습니다). 여기서는 제가 수집한 실제 데이터에 기계 학습을 적용하겠습니다.
내가 가장 좋아하는 기계 학습 알고리즘 중 두 가지는 이해하기 쉽기 때문에 K Nearest Neighbors와 Naive Bayes입니다. 좋은 결과를 얻기 위해 알고리즘이 복잡할 필요는 없으며 일부 문제의 경우 이 두 알고리즘이 빠르고 정확하게 수행됩니다.
K Nearest Neighbors는 거의 그대로입니다. 알고리즘은 데이터 세트의 관측값 중 예측하려는 지점에 가장 가까운 "K"를 계산합니다. 그런 다음 예측은 가장 가까운 지점에 대한 응답의 평균(응답 변수가 연속형인 경우)이거나 가장 빈도가 높은 범주(응답 변수가 범주형인 경우)입니다. 일반적으로 K 범위에 적합하고 교차 검증을 사용하여 최고의 예측 성능을 제공하는 K를 선택합니다.
나는 종종 Naive Bayes가 "Naive"라고 불리는 이유를 묻습니다. 이름은 이 알고리즘을 사용할 때 만들어진 주요 가정이 모든 예측 변수가 서로 독립적이라는 사실에서 비롯됩니다. 많은 경우에 그것은 순진한 가정입니다. 따라서 이 방법은 서로 높은 상관 관계가 있는 예측 변수가 있는 경우보다 해당 가정이 참에 가까울 때 더 잘 수행되는 경향이 있습니다. 예측을 하기 위해 관찰된 예측 변수가 주어진 응답 범주(승패)의 확률은 해당 범주가 응답인 교육 데이터에서 해당 값을 관찰할 확률을 기반으로 계산됩니다. 계산된 확률이 더 높은 범주 결과가 예측 범주입니다.
이 두 가지 방법을 실제로 살펴보겠습니다.
누가 더 나은가요?
남편과 나는 열렬한 당구 선수이며 직장에서 집에 돌아오면 거의 매일 게임을 합니다. 1년 정도 플레이한 후, 우리는 꽤 균등하게 일치한다고 생각했고 어쩌면 내가 약간 더 나을 수도 있습니다. 나는 "우리는 이 질문에 대답할 수 있습니다!"라고 말했습니다.
그래서 2018년 1월 1일부터 결과를 추적하기 시작했습니다. 저는 집에 있는 게임방에 있는 컴퓨터에 JMP가 설치되어 있지 않기 때문에 월, 요일, 날짜, 승리한 게임 수, 플레이한 게임 수, 나는 그 게임 세션에서 이겼고, 어떤 당구 게임이 진행되었는지(8볼 또는 9볼). 이것은 먼저 스프레드시트에 있었기 때문에 전체 게임 승률과 세션 승률을 계산하는 열도 있습니다.
고맙게도 Excel 파일을 JMP 홈 창으로 끌어다 놓기만 하면 Excel 가져오기 마법사가 마법처럼 JMP 데이터 테이블을 생성합니다. 세션 승리를 위한 몇 가지 조정? 지표는 명목 변수와 서수 변수에 대해 이기고 플레이한 게임의 수이며, 다음 날 풀 지배를 예측할 준비가 되었습니다!
Imported dataImported dataImported dataImported data가져온 데이터 내가 아직 준비가 안 됐다는 점만 빼면. 가장 적합한 K를 결정하기 위해 교차 검증이 사용된다고 K Nearest Neighbors에서 언급한 것을 기억하십니까? 현재 교육 및 검증에 대한 열이 없습니다. K Nearest Neighbors와 Naïve Bayes 모두 플랫폼 출시 시 데이터의 일정 비율을 유효성 검사로 사용할 수 있는 옵션이 있지만 두 방법을 비교하려면 둘 다에 대해 동일한 훈련 세트를 사용해야 합니다. 다행스럽게도 JMP의 Make Validation Column 유틸리티를 통해 여기서도 다루었습니다.
유틸리티에는 유효성 검사 열을 만드는 방법에 대한 몇 가지 옵션이 있습니다. 응답 변수가 매우 불균형한 경우(실패가 흔하지 않거나 사기 거래를 찾는 경우 발생) Stratified Random 옵션을 사용하여 학습 및 검증 세트에 두 응답이 모두 포함된 데이터가 있는지 확인하고 싶습니다. 이 경우 내 모든 열이 상당히 잘 균형을 이루고 있다는 것을 알고 있으므로 범주가 내 교육 또는 검증 세트에서 완전히 누락될 가능성은 없습니다. 따라서 Fixed Random 옵션을 사용하여 Validation Column을 생성하겠습니다. 나중에 이 특정 열을 다시 재생할 수 있도록 임의 생성에 대한 시드를 설정할 수 있지만 이 경우에는 필요하지 않다고 생각합니다.
분석 시간!
이제 유효성 검사 열을 손에 들고 Analyze > Predictive Modeling 메뉴에서 K Nearest Neighbors 플랫폼을 시작할 수 있습니다. 세션 승리? 는 내 응답 변수이며 내가 예측하고 싶은 것, 즉 내 생일인 10월 13일 토요일입니다. [참고: 저는 이 글을 제 생일 전에 쓰기 시작했습니다. 여기에서 만든 예측이 맞는지 끝까지 읽어보세요!] Month, Day, Game, Played(플레이한 게임 수)는 제 요인입니다. 대부분 각 월-일 조합이 한 번 발생하기 때문에 날짜가 도움이 되지 않을 것이라고 생각합니다(여러 세션을 플레이한 주말 몇 일 제외). 또한 플랫폼에서 기본 10이 아닌 최대 25까지 가장 가까운 이웃을 계산하도록 할 것입니다.
KNN Launch DialogKNN Launch DialogKNN Launch DialogKNN Launch DialogKNN 실행 대화상자
보고서의 모델 선택 부분은 1~25개의 이웃이 있는 모델에 대한 각 교육 및 검증 세트에서 계산된 오분류율을 추적합니다. 선택 라인은 검증 세트에서 오분류율이 가장 작은 K = 20으로 설정됩니다. 아래 표는 검증 세트에 있는 관측치의 44% 이상이 잘못 분류되었음을 보여줍니다. Confusion Matrix는 실제로 승패인 대략 동일한 수의 관찰이 잘못 분류되었음을 보여줍니다. Mosaic Plot은 혼란 행렬을 시각적으로 표현합니다.
KNN ReportKNN ReportKNN ReportKNN ReportKNN 보고서 오분류 비율은 크지 않지만 내 예측 변수가 실제로 그렇게 예측 가능한지 확신할 수 없습니다. 1월 1일에 이 글을 다시 쓸 생각을 했다면 하루 동안 얼마나 스트레스를 받았는지, 게임과 함께 성인 음료를 즐기고 있었는지, 잠을 얼마나 잤는지 등을 추적했을 것입니다. 전날 밤을 보냈다! 그래서 나는 나에게 딱 맞는 모델을 제공하지 않는 알고리즘을 탓하지 않을 것입니다.
예측 공식을 데이터 테이블에 저장하여 Naive Bayes를 사용하여 동일한 데이터를 맞춘 후 내 생일을 예측할 수 있습니다.
NB Launch DialogNB Launch DialogNB Launch DialogNB Launch DialogNB 시작 대화 상자
가장 먼저 눈에 띄는 것은 유효성 검사 세트의 오분류율이 40%를 약간 넘는 수준으로 약간 더 낮다는 것입니다. 혼동 행렬은 K Nearest Neighbors 모델보다 Naive Bayes 모델을 사용하여 유효성 검사 세트에서 7개 더 많은 관측값을 올바르게 분류했음을 보여줍니다. 마지막으로 각 세트에 대한 ROC 곡선이 있습니다. 유효성 검사 세트에서 곡선 아래 영역(모델 적합도의 또 다른 척도)은 0.5676입니다. 이것은 좋지는 않지만 AUC ≈ 0.5를 제공하는 무작위 추측보다 여전히 낫습니다.
NB ReportNB ReportNB ReportNB ReportNB 보고서
내 생일 풀 성능에 대한 예측을 위해 예측 공식을 데이터 테이블에 다시 저장하겠습니다.
우리는 9볼을 할 때 "베스트 오브 나인" 시리즈를 하기 때문에 몇 게임을 할지 미리 알 수 없습니다. 5-0 패배에서 빨리 이길 수 있습니까? 아니면 승자를 결정하는 데 9개의 게임이 모두 필요합니까? 플레이할 수 있는 각 게임 수(5~9)에 대한 행을 추가하고 모델이 예측하는 내용을 확인합니다.
Added rows for predictionAdded rows for predictionAdded rows for predictionAdded rows for prediction예측을 위해 추가된 행
이 특별한 날에 두 모델은 시리즈가 9게임으로 가지 않는 한 내가 승자가 되어야 한다는 데 동의합니다. 이 경우 K Nearest Neighbors는 내가 질 것이라고 예측합니다. 행복한 생일이 될거야!
며칠 후 내 생일이 다가오고 나는 내가 이길 것이라는 확신으로 무장하고 오락실에 들어갔다. 한 시간 정도 지나서 나는 3대 5로 지고 낙심한 채 퇴장했습니다. 적어도 나는 케이크를 얻었다!
무슨 일이에요?
모델에 따르면 상황이 너무 좋아 보였습니다! 내가 어떻게 잃을 수 있었습니까? 나이브 베이즈 모델은 궁극적인 예측과 더불어 추정된 승률을 살펴볼 수 있는 기회를 제공합니다. 너무 큰 기대를 하기보다는 그것들도 살펴봐야 했을 것 같습니다. 나는 확률 공식을 데이터 테이블에 저장했고, 내가 이길 것으로 예측되었지만 가장 높은 확률은 75% 미만이었고 가장 낮은 확률은 60%를 약간 넘었다는 것이 분명해졌습니다. 그것은 남편이 실제로 이길 가능성이 꽤 높다는 것을 의미합니다. 그리고 최종 예측만 보고 실제 생일 당첨 확률을 잘못 판단했습니다. 다음 번에 내기를 걸기 전에 내가 가지고 있는 모든 정보를 살펴봐야 한다는 주의의 말로 받아들일 것입니다!
Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]승리 확률. [참고: 일부 데이터 테이블 열은 공간을 위해 숨겨져 있습니다.]
이별 샷
이 모델에 대한 몇 가지 마지막 단어: 모델의 변수가 응답을 잘 예측하지 못하는 경우 가장 진보된 알고리즘도 제대로 수행되지 않습니다. 우리는 이러한 데이터와 그들이 가지고 있는 높은 오분류율을 가지고 행동하는 것을 봅니다. 앞서 말했듯이 이것은 알고리즘의 결함이 아니라 내가 수집한 데이터의 결함입니다. 합리적인 예측 변수가 있는 대부분의 모델은 여기에 있는 것보다 훨씬 더 성공적입니다. 아마도 2019년에 데이터 수집에 정보를 더 추가하고 이러한 모델을 다시 방문할 것입니다.
또한 풀은 기계 학습의 많은(어쩌면 대부분의) 일반적인 응용 프로그램보다 인간 요소가 결과에서 더 큰 역할을 하는 스포츠 이벤트입니다. 약자가 화를 내는 대학 및 프로 축구 경기에서 가을에 거의 매주 주말마다 이런 경기가 펼쳐지는 것을 볼 수 있습니다. 이것은 때때로 "주어진 일요일"이라고합니다. 그러나 이러한 확률이 주어지면 장기적으로 많은 시행착오를 거치면 내기에서 이길 것입니다. 대부분의 경우 좋아하는 축구 팀이 이기고 스포츠 베터가 돈을 버는 것과 같습니다. 그리고 사실 생일 이후의 날을 보면 약 60%의 확률로 당첨되었습니다.