League of Legends의 경기 데이터에서 승부를 판단하는 머신러닝 ③
이번에 할 일
저번는 API를 이용해 경기 전적 데이터를 수집하는 프로그램을 제작했다.이번에는 그것을 이용하여 실제 데이터를 수집하고 저장한다.그리고 저는 교사가 있는 기계를 열심히 공부할 것입니다.
또 머신러닝과 관련해서는 며칠 전 임프레스사에서 발매한'파이썬머신러닝 프로그램 디자인'이라는 책을 구매해 참고했고, 대체로 코드 복사 부착 형태로 실천해 봤다.링크
데이터 수집 및 저장
우선 지난번 코드는 수집된 데이터만 출력했기 때문에 CSV에 이 데이터를 저장하기 위해 마지막 쪽을 수정했습니다.또한, 파이톤의 모듈 중 하나인 판다스를 사용했다.
lol.pydf1 = pd.DataFrame(data_list, columns=decision_list)
df2 = pd.DataFrame(result_lsit)
df1.to_csv("dataset.csv",sep=",", mode='a',header=False)
df2.to_csv("rabel.csv",sep=",", mode='a',header=False)
지난번에 보여준 코드에 이걸 추가했습니다.df1은 전적 데이터를 칼럼으로 하는 데이터 사전의 관건으로 df2가 승부 결과를 대입했다.그리고 그것을,dataset.csv와 라벨.csv에 저장되었습니다.경로를 지정해야 하는데 이번엔 같은 디렉토리에 파일을 만들었기 때문에 그렇게 했어요.
모디=a는 한 번에 20경기만 할 수 있기 때문에 이 종목을 여러 번 수행한다.따라서 아까 파일에 추가하기 위해 추가할 모드의 매개 변수를 설정합니다.
또한, 헤더 =false이지만 이는 추가 기록 시 헤더를 넣으면 20경기마다 칼럼이 들어오는 것을 막기 위해서다.따라서 True는 첫 번째, False는 두 번째 이후에만 적용됩니다.
실제 수집한 데이터가github로 높아졌다.dataset.csv , rabel.csv
교사가 있어 실천 학습을 한다.
그럼, 저는 실제로 공부해 보겠습니다.이번에는 scikit-learn을 사용하여 강력한 학습 알고리즘 중 하나인 지원 벡터기(이하 SVM)를 사용했다.
먼저 사용할 모듈을 가져옵니다.
lol_learning.pyimport pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
pandas가 CSV 파일을 읽기 때문에 나머지 세 개는 제가 다시 설명하고 싶습니다.
다음은 데이터 집합의 읽기와 훈련 데이터와 테스트 데이터를 분리한다.
lol_learning.pyX = pd.read_csv("~/dataset.csv", index_col=0)
y = pd.read_csv("~/rabel.csv", index_col=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=1)
X에는 전적 데이터를, y에는 승부 레이블을 입력합니다.이 때,pandas를 사용하여 데이터를 읽어야 하지만, 현재 index를 지정하지 않으면, 무관한 열 번호, index에 들어갑니다col=0.
X와 y를 설정한 후 훈련과 테스트의 데이터로 나뉜다.여기 모듈의 두 번째traintest_split을 사용합니다.
이 모듈은 훈련용과 테스트용으로 분할할 수 있는 함수,test사이즈 설정으로 테스트 데이터를 5:5로 분배할 수 있습니다.
그리고 데이터의 표준화를 진행한다.여기에는 세 번째 모듈을 사용합니다.
lol_learning.pysc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
sc.fit에서 훈련 데이터에서 평균과 표준 편차를 계산한 다음sc.transform 표준화 훈련 데이터와 테스트 데이터를 사용한다.이 표준화에 관해서는 진행하지 않은 상태와 비교하고 싶습니다.
이어서 드디어 기계 학습이 시작되었다.
lol_learning.pysvm = SVC(kernel="linear", C=1.0, random_state=1)
svm.fit(X_train_std, y_train)
print("トレーニングデータでの正解率: %.2f" % svm.score(X_train_std, y_train))
print("テストデータでの正解率: %.2f" % svm.score(X_test_std, y_test))
네 번째 마지막 모듈을 사용하세요.이거 sklearn.svm에 SVM이 있습니다.SVC () 가 SVM 인스턴스를 생성한 후 svm.피트에서 모델 공부를 해요.훈련은 학습과 시험으로 나뉘기 때문에 이곳의 매개 변수는train이다.이렇게 하면 공부를 할 수 있고, 출력 결과는 이렇게 된다.
학습 가능 여부를 확인하기 위해 훈련 데이터의 승부 결과를 예측한 정확도는 97%, 실제 테스트 데이터로 예측한 정확도는 83%였다.
표준화되지 않았을 때와 테스트했을 때의 비교
아까 표준화를 안 하는 게 뭐가 달라졌는지 시험해 봤어요.
우선, 표준화되지 않으면
(표준화되지 않았기 때문에 X train std가 아니라 X train)
다음은 아까와 같은 이미지지만 표준화한 건 이거예요.
이렇게 보면 표준화 후 훈련 데이터의 정확도는 11%, 테스트 데이터의 정확도는 7% 라는 것을 알 수 있다.
또 훈련 데이터와 테스트 데이터의 정확도 차이는 10%와 14%도 다르다.
훈련 데이터와 테스트 데이터의 분할 비율
지금까지 훈련 데이터와 테스트 데이터를 5:5로 바꿔 학습했다.이번에는 같은 조건으로 10% 에서 90% 의 비율을 비교해 보고 싶습니다.for size in np.arange(0.1, 1.0, 0.1):
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=size, random_state=1)
분배 외에 for문장을 넣으면 10퍼센트에서 90퍼센트의 정확도를 얻어냈다.
테스트 데이터 비율
10%
20%
30%
40%
50%
60%
70%
80%
90%
훈련 데이터의 정확도
89%
89%
89%
90%
93%
91%
100%
100%
100%
테스트 데이터의 정확도
92%
86%
82%
81%
84%
82%
78%
75%
78%
이렇게 됐습니다.
훈련 데이터의 비율이 클수록 학습 확인을 위해 예측 훈련 데이터의 정확도가 높아져 결국 100%로 바뀌었다.
다른 한편, 테스트 데이터가 10%에 불과할 때 수치가 크고, 이후 상승과 하락이 있었다.테스트 데이터가 10%에 불과하기 때문에 시행 횟수가 적고 우연한 정확도가 높아졌다.물론 테스트 데이터의 비율은 매우 적다 = 훈련을 더 많이 할 수 있다.그래서 전체적으로 왼쪽으로 갈수록 정확도가 높아지는 것이 옳다고 생각한다.하지만 데이터 수가 매우 적기 때문(250개 정도)이기 때문에 아주 적은 것만 있다.
총결산
나는 실제로 기계 학습을 실천해 보았지만 복제품이 많아서 이론적인 일을 이해하지 못했다.그리고 무엇보다 경기 데이터로 결과를 예측할 수 있다.그래서?이런 수준밖에 안 된다.끝난 경기의 데이터에서 끝난 경기의 결과를 예측하기 때문에 이미 예측이란 말인가?이런 느낌까지 든다.
어쨌든 무엇이든 좋으니 먼저 기계 학습에 접촉해 보자.그런 생각부터 해봤는데 의미 있는 걸 해냈다는 실감이 안 나서 다음에는 다른 걸로 의미 있는 걸 예측하거나 개선하면 좋겠다고 생각했어요.
이번 코드는 여기.
Reference
이 문제에 관하여(League of Legends의 경기 데이터에서 승부를 판단하는 머신러닝 ③), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hyo_07/items/0051ed5acbde22567041
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선 지난번 코드는 수집된 데이터만 출력했기 때문에 CSV에 이 데이터를 저장하기 위해 마지막 쪽을 수정했습니다.또한, 파이톤의 모듈 중 하나인 판다스를 사용했다.
lol.py
df1 = pd.DataFrame(data_list, columns=decision_list)
df2 = pd.DataFrame(result_lsit)
df1.to_csv("dataset.csv",sep=",", mode='a',header=False)
df2.to_csv("rabel.csv",sep=",", mode='a',header=False)
지난번에 보여준 코드에 이걸 추가했습니다.df1은 전적 데이터를 칼럼으로 하는 데이터 사전의 관건으로 df2가 승부 결과를 대입했다.그리고 그것을,dataset.csv와 라벨.csv에 저장되었습니다.경로를 지정해야 하는데 이번엔 같은 디렉토리에 파일을 만들었기 때문에 그렇게 했어요.모디=a는 한 번에 20경기만 할 수 있기 때문에 이 종목을 여러 번 수행한다.따라서 아까 파일에 추가하기 위해 추가할 모드의 매개 변수를 설정합니다.
또한, 헤더 =false이지만 이는 추가 기록 시 헤더를 넣으면 20경기마다 칼럼이 들어오는 것을 막기 위해서다.따라서 True는 첫 번째, False는 두 번째 이후에만 적용됩니다.
실제 수집한 데이터가github로 높아졌다.dataset.csv , rabel.csv
교사가 있어 실천 학습을 한다.
그럼, 저는 실제로 공부해 보겠습니다.이번에는 scikit-learn을 사용하여 강력한 학습 알고리즘 중 하나인 지원 벡터기(이하 SVM)를 사용했다.
먼저 사용할 모듈을 가져옵니다.
lol_learning.pyimport pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
pandas가 CSV 파일을 읽기 때문에 나머지 세 개는 제가 다시 설명하고 싶습니다.
다음은 데이터 집합의 읽기와 훈련 데이터와 테스트 데이터를 분리한다.
lol_learning.pyX = pd.read_csv("~/dataset.csv", index_col=0)
y = pd.read_csv("~/rabel.csv", index_col=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=1)
X에는 전적 데이터를, y에는 승부 레이블을 입력합니다.이 때,pandas를 사용하여 데이터를 읽어야 하지만, 현재 index를 지정하지 않으면, 무관한 열 번호, index에 들어갑니다col=0.
X와 y를 설정한 후 훈련과 테스트의 데이터로 나뉜다.여기 모듈의 두 번째traintest_split을 사용합니다.
이 모듈은 훈련용과 테스트용으로 분할할 수 있는 함수,test사이즈 설정으로 테스트 데이터를 5:5로 분배할 수 있습니다.
그리고 데이터의 표준화를 진행한다.여기에는 세 번째 모듈을 사용합니다.
lol_learning.pysc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
sc.fit에서 훈련 데이터에서 평균과 표준 편차를 계산한 다음sc.transform 표준화 훈련 데이터와 테스트 데이터를 사용한다.이 표준화에 관해서는 진행하지 않은 상태와 비교하고 싶습니다.
이어서 드디어 기계 학습이 시작되었다.
lol_learning.pysvm = SVC(kernel="linear", C=1.0, random_state=1)
svm.fit(X_train_std, y_train)
print("トレーニングデータでの正解率: %.2f" % svm.score(X_train_std, y_train))
print("テストデータでの正解率: %.2f" % svm.score(X_test_std, y_test))
네 번째 마지막 모듈을 사용하세요.이거 sklearn.svm에 SVM이 있습니다.SVC () 가 SVM 인스턴스를 생성한 후 svm.피트에서 모델 공부를 해요.훈련은 학습과 시험으로 나뉘기 때문에 이곳의 매개 변수는train이다.이렇게 하면 공부를 할 수 있고, 출력 결과는 이렇게 된다.
학습 가능 여부를 확인하기 위해 훈련 데이터의 승부 결과를 예측한 정확도는 97%, 실제 테스트 데이터로 예측한 정확도는 83%였다.
표준화되지 않았을 때와 테스트했을 때의 비교
아까 표준화를 안 하는 게 뭐가 달라졌는지 시험해 봤어요.
우선, 표준화되지 않으면
(표준화되지 않았기 때문에 X train std가 아니라 X train)
다음은 아까와 같은 이미지지만 표준화한 건 이거예요.
이렇게 보면 표준화 후 훈련 데이터의 정확도는 11%, 테스트 데이터의 정확도는 7% 라는 것을 알 수 있다.
또 훈련 데이터와 테스트 데이터의 정확도 차이는 10%와 14%도 다르다.
훈련 데이터와 테스트 데이터의 분할 비율
지금까지 훈련 데이터와 테스트 데이터를 5:5로 바꿔 학습했다.이번에는 같은 조건으로 10% 에서 90% 의 비율을 비교해 보고 싶습니다.for size in np.arange(0.1, 1.0, 0.1):
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=size, random_state=1)
분배 외에 for문장을 넣으면 10퍼센트에서 90퍼센트의 정확도를 얻어냈다.
테스트 데이터 비율
10%
20%
30%
40%
50%
60%
70%
80%
90%
훈련 데이터의 정확도
89%
89%
89%
90%
93%
91%
100%
100%
100%
테스트 데이터의 정확도
92%
86%
82%
81%
84%
82%
78%
75%
78%
이렇게 됐습니다.
훈련 데이터의 비율이 클수록 학습 확인을 위해 예측 훈련 데이터의 정확도가 높아져 결국 100%로 바뀌었다.
다른 한편, 테스트 데이터가 10%에 불과할 때 수치가 크고, 이후 상승과 하락이 있었다.테스트 데이터가 10%에 불과하기 때문에 시행 횟수가 적고 우연한 정확도가 높아졌다.물론 테스트 데이터의 비율은 매우 적다 = 훈련을 더 많이 할 수 있다.그래서 전체적으로 왼쪽으로 갈수록 정확도가 높아지는 것이 옳다고 생각한다.하지만 데이터 수가 매우 적기 때문(250개 정도)이기 때문에 아주 적은 것만 있다.
총결산
나는 실제로 기계 학습을 실천해 보았지만 복제품이 많아서 이론적인 일을 이해하지 못했다.그리고 무엇보다 경기 데이터로 결과를 예측할 수 있다.그래서?이런 수준밖에 안 된다.끝난 경기의 데이터에서 끝난 경기의 결과를 예측하기 때문에 이미 예측이란 말인가?이런 느낌까지 든다.
어쨌든 무엇이든 좋으니 먼저 기계 학습에 접촉해 보자.그런 생각부터 해봤는데 의미 있는 걸 해냈다는 실감이 안 나서 다음에는 다른 걸로 의미 있는 걸 예측하거나 개선하면 좋겠다고 생각했어요.
이번 코드는 여기.
Reference
이 문제에 관하여(League of Legends의 경기 데이터에서 승부를 판단하는 머신러닝 ③), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hyo_07/items/0051ed5acbde22567041
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
X = pd.read_csv("~/dataset.csv", index_col=0)
y = pd.read_csv("~/rabel.csv", index_col=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=1)
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
svm = SVC(kernel="linear", C=1.0, random_state=1)
svm.fit(X_train_std, y_train)
print("トレーニングデータでの正解率: %.2f" % svm.score(X_train_std, y_train))
print("テストデータでの正解率: %.2f" % svm.score(X_test_std, y_test))
아까 표준화를 안 하는 게 뭐가 달라졌는지 시험해 봤어요.
우선, 표준화되지 않으면
(표준화되지 않았기 때문에 X train std가 아니라 X train)
다음은 아까와 같은 이미지지만 표준화한 건 이거예요.
이렇게 보면 표준화 후 훈련 데이터의 정확도는 11%, 테스트 데이터의 정확도는 7% 라는 것을 알 수 있다.
또 훈련 데이터와 테스트 데이터의 정확도 차이는 10%와 14%도 다르다.
훈련 데이터와 테스트 데이터의 분할 비율
지금까지 훈련 데이터와 테스트 데이터를 5:5로 바꿔 학습했다.이번에는 같은 조건으로 10% 에서 90% 의 비율을 비교해 보고 싶습니다.for size in np.arange(0.1, 1.0, 0.1):
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=size, random_state=1)
분배 외에 for문장을 넣으면 10퍼센트에서 90퍼센트의 정확도를 얻어냈다.
테스트 데이터 비율
10%
20%
30%
40%
50%
60%
70%
80%
90%
훈련 데이터의 정확도
89%
89%
89%
90%
93%
91%
100%
100%
100%
테스트 데이터의 정확도
92%
86%
82%
81%
84%
82%
78%
75%
78%
이렇게 됐습니다.
훈련 데이터의 비율이 클수록 학습 확인을 위해 예측 훈련 데이터의 정확도가 높아져 결국 100%로 바뀌었다.
다른 한편, 테스트 데이터가 10%에 불과할 때 수치가 크고, 이후 상승과 하락이 있었다.테스트 데이터가 10%에 불과하기 때문에 시행 횟수가 적고 우연한 정확도가 높아졌다.물론 테스트 데이터의 비율은 매우 적다 = 훈련을 더 많이 할 수 있다.그래서 전체적으로 왼쪽으로 갈수록 정확도가 높아지는 것이 옳다고 생각한다.하지만 데이터 수가 매우 적기 때문(250개 정도)이기 때문에 아주 적은 것만 있다.
총결산
나는 실제로 기계 학습을 실천해 보았지만 복제품이 많아서 이론적인 일을 이해하지 못했다.그리고 무엇보다 경기 데이터로 결과를 예측할 수 있다.그래서?이런 수준밖에 안 된다.끝난 경기의 데이터에서 끝난 경기의 결과를 예측하기 때문에 이미 예측이란 말인가?이런 느낌까지 든다.
어쨌든 무엇이든 좋으니 먼저 기계 학습에 접촉해 보자.그런 생각부터 해봤는데 의미 있는 걸 해냈다는 실감이 안 나서 다음에는 다른 걸로 의미 있는 걸 예측하거나 개선하면 좋겠다고 생각했어요.
이번 코드는 여기.
Reference
이 문제에 관하여(League of Legends의 경기 데이터에서 승부를 판단하는 머신러닝 ③), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hyo_07/items/0051ed5acbde22567041
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
for size in np.arange(0.1, 1.0, 0.1):
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=size, random_state=1)
나는 실제로 기계 학습을 실천해 보았지만 복제품이 많아서 이론적인 일을 이해하지 못했다.그리고 무엇보다 경기 데이터로 결과를 예측할 수 있다.그래서?이런 수준밖에 안 된다.끝난 경기의 데이터에서 끝난 경기의 결과를 예측하기 때문에 이미 예측이란 말인가?이런 느낌까지 든다.
어쨌든 무엇이든 좋으니 먼저 기계 학습에 접촉해 보자.그런 생각부터 해봤는데 의미 있는 걸 해냈다는 실감이 안 나서 다음에는 다른 걸로 의미 있는 걸 예측하거나 개선하면 좋겠다고 생각했어요.
이번 코드는 여기.
Reference
이 문제에 관하여(League of Legends의 경기 데이터에서 승부를 판단하는 머신러닝 ③), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hyo_07/items/0051ed5acbde22567041텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)