주가를 scikit-learn으로 기계 학습해 보자 분류편
3748 단어 분류파이썬scikit-learn기계 학습
또, 어디까지나 참고를 위해, 전건으로 훈련해, 같은 데이터로 학습 결과를 확인합니다.
목적
과거 4일분을 참고로 닛케이 평균을 예측합니다.
주가 데이터 로드
마츠이 증권의 CSV에서 종가를 읽습니다.
#coding: UTF-8
import pandas as pd
stock_data = pd.read_csv('stockchart_20180909.csv')
owarine = stock_data[['終値']]
(메모)처음 「종가」의 표기로는 안 되었습니다. 왠지 다시 실행하면 OK. 이유는・・・왜일까요.
successive_data = []
answers = []
for i in range(4, count_s):
successive_data.append([owarine[i-4], owarine[i-3], owarine[i-2], owarine[i-1]])
answers.append(owarine[i])
successive_data:과거 4일분의 종가
answers: 당일 종가
clf = svm.LinearSVC()
n = len(successive_data)
m = len(answers)
clf.fit(successive_data, answers)
디버그
기계 학습시 오류가 발생했습니다.
"dim 3"은 3차원 배열로 되어 있다는 에러인 것 같습니다.
잘 보면 owarine이 이상합니다.
「[~],[~]」이 되어 있기 (위해)때문에, 1 개의 값의 배열의 1000 개 배열의 1 개의 리스트 취급의 모양입니다. 파이썬에서는 하나의 값의 배열이 가능합니다.
owarine = stock_data[['終値']]
↓
owarine = stock_data['終値']
여기 문제였습니다. pandas의 복수열용 샘플 그대로 사용한 것이 문제였던 것 같습니다.
다시 시도하면 다른 오류가 발생합니다.
구그라고 보면 y값은 정수가 아니면 안 되는 것 같다.
따라서 answers는 정수입니다.
answers.append(owarine[i])
↓
answers.append(round(owarine[i]))
fit이 통과했기 때문에 같은 데이터로 결과를 출력합니다.
predicted = clf.predict(successive_data)
일단 학습하고 숫자가 나왔습니다.
하지만 같은 숫자가 대량으로・・・이것은 SVM에서 학습했기 때문입니다.
SVM 어디까지나 분류 때문에 교사가 있는 경우의 어느 값에 가까운가
출력했기 때문입니다.
※SVM의 설명은 여기 가 간단하고 알기 쉽다고 합니다.
따라서 여기에서는 교사 데이터를 닛케이 평균이 아닌 전날과의 차이로 합니다.
그냥 전날에 비해 올랐다/내렸다는 상당히 많은 사람이하고 있기 때문에 조금 취향을 바꾼다
(닛케이 평균 당일 - 닛케이 평균 전날) ÷ 100을 반올림 한 값을 사용합니다.
(예) 전날부터 +180엔이라면 +2, -310엔이라면 -3, +30엔이라면 0등.
크기의 폭이 있던 쪽이 리얼 같아지는 것이라고 생각합니다.
방금 수정한 answers를 다시 수정합니다.
answers.append(round(owarine[i]))
↓
x1 = (owarine[i] - owarine[i-1]) / 100
x2 =round(x1)
answers.append(x2)
학습 결과
이대로 배우면
아무래도 2와 -1만으로 수상하지만 학습을 할 수 있었습니다.
※ 몇번이나 시험하면 결과는 바뀌었습니다.
요약
결과를 표시합니다.
from sklearn.metrics import accuracy_score
accuracy_score(answers, predicted)
별로 좋지 않은 것 같습니다.
출처
Reference
이 문제에 관하여(주가를 scikit-learn으로 기계 학습해 보자 분류편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/soshi8/items/8102fdda8a0b322dd6b5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
마츠이 증권의 CSV에서 종가를 읽습니다.
#coding: UTF-8
import pandas as pd
stock_data = pd.read_csv('stockchart_20180909.csv')
owarine = stock_data[['終値']]
(메모)처음 「종가」의 표기로는 안 되었습니다. 왠지 다시 실행하면 OK. 이유는・・・왜일까요.
successive_data = []
answers = []
for i in range(4, count_s):
successive_data.append([owarine[i-4], owarine[i-3], owarine[i-2], owarine[i-1]])
answers.append(owarine[i])
successive_data:과거 4일분의 종가
answers: 당일 종가
clf = svm.LinearSVC()
n = len(successive_data)
m = len(answers)
clf.fit(successive_data, answers)
디버그
기계 학습시 오류가 발생했습니다.
"dim 3"은 3차원 배열로 되어 있다는 에러인 것 같습니다.
잘 보면 owarine이 이상합니다.
「[~],[~]」이 되어 있기 (위해)때문에, 1 개의 값의 배열의 1000 개 배열의 1 개의 리스트 취급의 모양입니다. 파이썬에서는 하나의 값의 배열이 가능합니다.
owarine = stock_data[['終値']]
↓
owarine = stock_data['終値']
여기 문제였습니다. pandas의 복수열용 샘플 그대로 사용한 것이 문제였던 것 같습니다.
다시 시도하면 다른 오류가 발생합니다.
구그라고 보면 y값은 정수가 아니면 안 되는 것 같다.
따라서 answers는 정수입니다.
answers.append(owarine[i])
↓
answers.append(round(owarine[i]))
fit이 통과했기 때문에 같은 데이터로 결과를 출력합니다.
predicted = clf.predict(successive_data)
일단 학습하고 숫자가 나왔습니다.
하지만 같은 숫자가 대량으로・・・이것은 SVM에서 학습했기 때문입니다.
SVM 어디까지나 분류 때문에 교사가 있는 경우의 어느 값에 가까운가
출력했기 때문입니다.
※SVM의 설명은 여기 가 간단하고 알기 쉽다고 합니다.
따라서 여기에서는 교사 데이터를 닛케이 평균이 아닌 전날과의 차이로 합니다.
그냥 전날에 비해 올랐다/내렸다는 상당히 많은 사람이하고 있기 때문에 조금 취향을 바꾼다
(닛케이 평균 당일 - 닛케이 평균 전날) ÷ 100을 반올림 한 값을 사용합니다.
(예) 전날부터 +180엔이라면 +2, -310엔이라면 -3, +30엔이라면 0등.
크기의 폭이 있던 쪽이 리얼 같아지는 것이라고 생각합니다.
방금 수정한 answers를 다시 수정합니다.
answers.append(round(owarine[i]))
↓
x1 = (owarine[i] - owarine[i-1]) / 100
x2 =round(x1)
answers.append(x2)
학습 결과
이대로 배우면
아무래도 2와 -1만으로 수상하지만 학습을 할 수 있었습니다.
※ 몇번이나 시험하면 결과는 바뀌었습니다.
요약
결과를 표시합니다.
from sklearn.metrics import accuracy_score
accuracy_score(answers, predicted)
별로 좋지 않은 것 같습니다.
출처
Reference
이 문제에 관하여(주가를 scikit-learn으로 기계 학습해 보자 분류편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/soshi8/items/8102fdda8a0b322dd6b5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)