You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 파이썬 예측 알고리즘 on Google, you do not find the information you need! Here are the best content compiled and compiled by the toplist.Experience-Porthcawl.com team, along with other related topics such as: 파이썬 예측 알고리즘 머신러닝 예측 모델 예제, 주가 예측 알고리즘, 딥러닝 예측 알고리즘, 머신러닝 예측 모델 종류, 파이썬 머신러닝 예측, 회귀 문제 예시, 머신러닝 모델 선택 기준, 딥러닝 예측 모델 종류
01-알고리즘 적용 – Kaggle에서 파이썬으로 데이터 분석 시작하기
- Article author: wikidocs.net
- Reviews from users: 8643 Ratings
- Top rated: 3.1
- Lowest rated: 1
- Summary of article content: Articles about 01-알고리즘 적용 – Kaggle에서 파이썬으로 데이터 분석 시작하기 전처리가 끝난 데이터에 예측 모델 알고리즘을 적용하는 방법을 알아보겠습니다. 지도 학습에 사용하는 몇 가지 알고리즘을 적용하기 위해 ml_fit 함수를 선언하고, … …
- Most searched keywords: Whether you are looking for 01-알고리즘 적용 – Kaggle에서 파이썬으로 데이터 분석 시작하기 전처리가 끝난 데이터에 예측 모델 알고리즘을 적용하는 방법을 알아보겠습니다. 지도 학습에 사용하는 몇 가지 알고리즘을 적용하기 위해 ml_fit 함수를 선언하고, … 온라인 책을 제작 공유하는 플랫폼 서비스
- Table of Contents:
Machine Learning을 이용한 간단 주식 예측
- Article author: superhky.tistory.com
- Reviews from users: 32334 Ratings
- Top rated: 4.8
- Lowest rated: 1
- Summary of article content: Articles about Machine Learning을 이용한 간단 주식 예측 파이썬 코드는 자주 보는 유튜브 동영상 강의를 참조하였다. 예측 알고리즘은 Radial Basis Function(RBF) 커널을 사용한 SVM을 통하여 구현한다. …
- Most searched keywords: Whether you are looking for Machine Learning을 이용한 간단 주식 예측 파이썬 코드는 자주 보는 유튜브 동영상 강의를 참조하였다. 예측 알고리즘은 Radial Basis Function(RBF) 커널을 사용한 SVM을 통하여 구현한다. 이번에는 비교적 간단한 Machine Learning을 이용하여 주식의 종가를 예측하는 것을 알아보겠다. 파이썬 코드는 자주 보는 유튜브 동영상 강의를 참조하였다. 예측 알고리즘은 Radial Basis Function(RBF) 커널을..
- Table of Contents:
EW TechnologyHobbyand!!!
태그
관련글
댓글0
최근글
인기글
최근댓글
태그
전체 방문자
티스토리툴바
‘Machine Learning/파이썬 머신러닝 완벽가이드 학습’ 카테고리의 글 목록 :: 데이터분석, 머신러닝 정리 노트
- Article author: injo.tistory.com
- Reviews from users: 21513 Ratings
- Top rated: 4.5
- Lowest rated: 1
- Summary of article content: Articles about ‘Machine Learning/파이썬 머신러닝 완벽가이드 학습’ 카테고리의 글 목록 :: 데이터분석, 머신러닝 정리 노트 파이썬 머신러닝 완벽가이드 학습 … 앙상블(Ensemble) 학습¶앙상블이란 여러 개의 알고리즘을 사용하여, 그 예측을 결함함으로써 보다 정확한 예측을 도출하는 기법 … …
- Most searched keywords: Whether you are looking for ‘Machine Learning/파이썬 머신러닝 완벽가이드 학습’ 카테고리의 글 목록 :: 데이터분석, 머신러닝 정리 노트 파이썬 머신러닝 완벽가이드 학습 … 앙상블(Ensemble) 학습¶앙상블이란 여러 개의 알고리즘을 사용하여, 그 예측을 결함함으로써 보다 정확한 예측을 도출하는 기법 … ‘Machine Learning/파이썬 머신러닝 완벽가이드 학습’ 카테고리의 글 목록
- Table of Contents:
Machine Learning파이썬 머신러닝 완벽가이드 학습
[Chapter 4 분류] 예제-산탄데르 고객만족 예측 문제산탄데르 고객만족 예측
데이터 전처리
XGBoost 모델 학습과 하이퍼 파라미터 튜닝
[Chapter 4 분류] LightGBM [Chapter 4 분류] XGBoost(eXtraGradient Boost) [Chapter 4 분류] 부스팅알고리즘(AdaBoost GBM)GBM의 하이퍼파라미터¶
[Chapter 4 분류] 랜덤포레스트(Random Forest) [Chapter 4 분류] 앙상블 학습앙상블(Ensemble) 학습¶
[Chapter 4 분류] Decision Tree ClassifierDecision Tree(결정트리) ¶
Decision Tree의 구조¶
장점¶
단점¶
사용자 행동 인식 데이터 세트¶
[Chapter 3 평가] 피마 인디언 당뇨병 데이터셋을 통한 평가지표 실습[신경망] RNN을 이용한 주식가격 예측 알고리즘 코드
- Article author: diane-space.tistory.com
- Reviews from users: 9423 Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about [신경망] RNN을 이용한 주식가격 예측 알고리즘 코드 노트/Python : 프로그래밍. [신경망] RNN을 이용한 주식가격 예측 알고리즘 코드. Diane_ … …
- Most searched keywords: Whether you are looking for [신경망] RNN을 이용한 주식가격 예측 알고리즘 코드 노트/Python : 프로그래밍. [신경망] RNN을 이용한 주식가격 예측 알고리즘 코드. Diane_ … 데이터 코드 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns def MinMaxScaler(data): denom=np.max(data,0)-np.min(data,0) nume=da..creative collage portfolio : Analysis & skills
- Table of Contents:
[파이썬 머신러닝 완벽 가이드] 회귀 실습(기본) – 자전거 대여 수요 예측 – 데이터 사이언스 사용 설명서
- Article author: dsbook.tistory.com
- Reviews from users: 19577 Ratings
- Top rated: 5.0
- Lowest rated: 1
- Summary of article content: Articles about [파이썬 머신러닝 완벽 가이드] 회귀 실습(기본) – 자전거 대여 수요 예측 – 데이터 사이언스 사용 설명서 카테고리형 데이터 셋을 One-Hot Encoding을 수행하였는가? 먼저 Linear Regression 모델을 통해서 회귀 예측을 하면 from sklearn.model_selection … …
- Most searched keywords: Whether you are looking for [파이썬 머신러닝 완벽 가이드] 회귀 실습(기본) – 자전거 대여 수요 예측 – 데이터 사이언스 사용 설명서 카테고리형 데이터 셋을 One-Hot Encoding을 수행하였는가? 먼저 Linear Regression 모델을 통해서 회귀 예측을 하면 from sklearn.model_selection … 데이터 셋 : https://www.kaggle.com/c/bike-sharing-demand/data 에서 train.csv파일을 bike_train.csv로 저장한 뒤 실습을 진행한다. 데이터 셋의 피처들을 확인하면 datatime : 날짜 season : 1 = 봄, 2 = 여름..데이터 사이언스 분야를 어떻게 공부하는지 알려주는 블로그
- Table of Contents:
검색
[파이썬 머신러닝 완벽 가이드] 회귀 실습(기본) – 자전거 대여 수요 예측[python/ML] 머신러닝(Machine Learning) – 회귀 :: WONA_IN_IT
- Article author: wonhwa.tistory.com
- Reviews from users: 19827 Ratings
- Top rated: 4.8
- Lowest rated: 1
- Summary of article content: Articles about [python/ML] 머신러닝(Machine Learning) – 회귀 :: WONA_IN_IT 오늘은 머신러닝의 기초가 되는 알고리즘 중 하나인 회귀를 사용하여 문제를 해결 … 지도학습에서 회귀(Regression)는 수치예측을 할때 쓰입니다. …
- Most searched keywords: Whether you are looking for [python/ML] 머신러닝(Machine Learning) – 회귀 :: WONA_IN_IT 오늘은 머신러닝의 기초가 되는 알고리즘 중 하나인 회귀를 사용하여 문제를 해결 … 지도학습에서 회귀(Regression)는 수치예측을 할때 쓰입니다. 오늘은 머신러닝의 기초가 되는 알고리즘 중 하나인 회귀를 사용하여 문제를 해결하는 방법을 알아보도록 하겠습니다. 머신 러닝(Machine Learning)이란? 머신러닝은 기계학습이라고도 합니다. 수많은 데이터를 컴..Everyday Happy day
같이 성장해 나가는 블로그가 되어요 😉 - Table of Contents:
티스토리툴바
[Python] 머신 러닝 지도 학습을 이용한 간단한 비만도 평가 모델 생성, 예측
- Article author: ddit-jhkim.tistory.com
- Reviews from users: 3994 Ratings
- Top rated: 4.0
- Lowest rated: 1
- Summary of article content: Articles about [Python] 머신 러닝 지도 학습을 이용한 간단한 비만도 평가 모델 생성, 예측 [Python] 머신 러닝 지도 학습을 이용한 간단한 비만도 평가 모델 생성, 예측 … K-최근접 이웃 알고리즘(K-Nearest Neighbors algorithm, KNN). …
- Most searched keywords: Whether you are looking for [Python] 머신 러닝 지도 학습을 이용한 간단한 비만도 평가 모델 생성, 예측 [Python] 머신 러닝 지도 학습을 이용한 간단한 비만도 평가 모델 생성, 예측 … K-최근접 이웃 알고리즘(K-Nearest Neighbors algorithm, KNN). 지도 학습(Supervised Learning) : 훈련하기 위한 데이터가 존재할 때 사용할 수 있는 기계학습(Machine Learning)의 한 방법 훈련 데이터(training data)는 입력(input)과 정답(label, target)으로 구성 사용할..
- Table of Contents:
태그
‘Programming[Machine Learning]’ Related Articles
티스토리툴바
See more articles in the same category here: toplist.Experience-Porthcawl.com/blog.
01-알고리즘 적용
전처리가 끝난 데이터에 예측 모델 알고리즘을 적용하는 방법을 알아보겠습니다. 지도 학습에 사용하는 몇 가지 알고리즘을 적용하기 위해 ml_fit 함수를 선언하고, 예측 모델을 기본 파라미터로 생성하여 생존률을 알아보겠습니다.
# 지도학습 모델 import from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier from sklearn.svm import SVC from sklearn.neighbors import KNeighborsClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # data 분리 data = train.drop(‘Survived’, axis=1).values target = train[‘Survived’].values x_train, x_valid, y_train, y_valid = train_test_split(data, target, test_size=0.4, stratify=target, random_state=0) # 모델 적용 함수 def ml_fit(model): model.fit(x_train, y_train) prediction = model.predict(x_valid) accuracy = accuracy_score(prediction, y_valid) print(model) print(f’총 {y_valid.shape[0]}명 중 {accuracy * 100:.3f}% 정확도로 생존을 맞춤’) return model # 기본 설정으로만 테스트 model = ml_fit(RandomForestClassifier(n_estimators=100)) model = ml_fit(LogisticRegression(solver=’lbfgs’)) model = ml_fit(SVC(gamma=’scale’)) model = ml_fit(KNeighborsClassifier()) model = ml_fit(GaussianNB()) model = ml_fit(DecisionTreeClassifier())
기본 설정으로 테스트한 알고리즘의 정확도는 아래와 같습니다. 랜덤 포레스트 알고리즘이 가장 높은 정확도를 보이고 있습니다.
알고리즘 정확도 RandomForestClassifier 79.832% SVC 79.832% LogisticRegression 78.711% DecisionTreeClassifier 77.031% KNeighborsClassifier 75.910% GaussianNB 73.669%
model = ml_fit(RandomForestClassifier(n_estimators=100)) 총 357명 중 79.832% 정확도로 생존을 맞춤 model = ml_fit(LogisticRegression(solver=’lbfgs’)) 총 357명 중 78.711% 정확도로 생존을 맞춤 model = ml_fit(SVC(gamma=’scale’)) 총 357명 중 79.832% 정확도로 생존을 맞춤 model = ml_fit(KNeighborsClassifier()) 총 357명 중 75.910% 정확도로 생존을 맞춤 model = ml_fit(GaussianNB()) 총 357명 중 73.669% 정확도로 생존을 맞춤 model = ml_fit(DecisionTreeClassifier()) 총 357명 중 77.031% 정확도로 생존을 맞춤
설정 변경후 테스트
다음과 같이 설정을 변경후 테스트를 하면 이전에 79.832%이었던 예측률이 81.513%로 높아 지는 것을 알 수 있습니다. 파라미터의 최적화를 통해 알고리즘의 정확도를 높일 수 있습니다.
Machine Learning을 이용한 간단 주식 예측
반응형
이번에는 비교적 간단한 Machine Learning을 이용하여 주식의 종가를 예측하는 것을 알아보겠다.
파이썬 코드는 자주 보는 유튜브 동영상 강의를 참조하였다.
예측 알고리즘은 Radial Basis Function(RBF) 커널을 사용한 SVM을 통하여 구현한다.
컴퓨터공학이나, 소프트웨어 전공이 아니라 Machine Learning에 대한 자세한 내용은 모르지만, 간단히 설명하면 다음과 같다.
서포트 백터 머신(SVM)은 딥러닝은 아니지만 이에 못지 않은 성능을 내는 Machine Learning 알고리즘이며 가볍다는 장점이 있어 분류(Classification)나 회귀(Regression)를 위해 많이 사용된다고 한다.
먼저 기본이 되는 선형 SVM이 있으며 이것은 데이터를 선형으로 분리하는 최적의 선형 결정 경계를 찾는 알고리즘이다.
그러나 데이터가 선형적으로 분류 안되는 경우가 있고 이를 위해 나온 기법이 커널 기법이라고 한다.
커널 기법은 2차원에서 선형적으로 분류할 수 없었던 것을 3차원 공간에서 분류할 수 있도록 하는 것이다.
이러한 커널 기법에는 Polynomial 커널, Sigmoid 커널, 가우시안 RBF 커널등 종류가 많으며 그중 가장 성능이 좋다고 알려진 것이 가우시안 RBF 커널이라고 한다.
여기서는, 선형 SVM과 Polynomial 커널, RBF 커널 세가지를 같이 표현하여 데이터 출력 결과를 비교하고 다음날의 주식 종가를 예측해 보겠다.
[1. 모듈 Import]다음의 모듈들이 필요하므로 Import 한다.
Python에서 제공하는 SVR 모듈을 포함해서 주식 데이터를 읽어오기 위한 “pandas_datareader”를 Import 한다.
모듈 Import
위에서 google.colab에서 drive를 import 하는 것은 주식 예측 외에 Lotto 데이터도 예측을 해볼 것인데 그때에 google drive에 저장된 Lotto 데이터를 읽어오기 위한 것이다.
[2. 주식 데이터 로드 ]다음의 코드를 통해 Yahoo Finance에서 코스피 주식 코드 055550에 해당하는 주식 데이터를 읽어온다.
다음의 코드는 전체 데이터 중에서 Machine Learning에 사용될 데이터를 잘라 stock_data_1에 저장한다.
주식 데이터 로드
여기서는 가장 오래된 데이터에서부터 1150개를 빼게 되므로 가장 최근의 데이터부터 일정량이 남아 사용되게 된다.
결과는 다음과 같으며 69개의 데이터가 남았다.
주식 데이터 로드 결과
[3. 기타 세팅 ]다음은 주식 데이터 중 가장 최근의 하루치 데이터를 추가로 빼서 예측된 결과와 맞춰보기 위해 가장 최근의 데이터를 빼는 내용이다.
이 결과 Machine Learning에 사용되는 데이터는 68개가 된다.
다음은 주식 데이터에서 종가에 해당하는 “Adj Close” 값을 변수에 저장하는 부분이다.
모델을 훈련시키기 위해서 앞에서의 68개 training용 주식 종가 데이터 외에 이와 개수가 동일한 일련번호가 필요하다.
아래는 이 일련번호를 만드는 코드이며 간단히 앞에서의 68개 주식 데이터 개수를 이용하여 만든다.
[4. 알고리즘 적용 및 결과 ]다음은 선형 SVR과 Polynomial SVR, RBF SVR을 적용하는 부분이며 아래와 같이 Python에서 아주 간단하게 할 수 있다.
Machine Learning 적용과 결과
C와 gamma, degree에 해당하는 매개변수들은 여기서 다루지 않겠다.
알고리즘을 최적으로 만들기 위해서 이 매개변수들을 조정해야 하며 이전에 XGBoost 알고리즘을 통한 주식 종가 예측에서도 이와 유사한 매개변수들이 있었다.
그때와 동일하게 grid search라는 경험적 방법에 의해 최적의 매개변수를 빠르게 찾을 수 있는데 여기에 대한 지식은 많지 않아서 다룰 수가 없다.
또한, 여기서 예측하고자 하는 주식 데이터나 로또 데이터는 사실 데이터 경계로 나눌 수 있는 데이터가 아니라서 크게 의미가 없을 것이라 생각된다.
각 모델의 출력
위는 각 모델이 출력한 결과와 실제 데이터를 도식화한 것이다.
그림에서 보면 알듯이 RBF 모델이 실제 데이터(검은 점)를 가장 잘 따라가고 있음을 알 수 있다.
이제 가장 최근의 날짜를 예측해 보겠다.
아래의 코드에서처럼 하루치를 더 만들어서 각 모델을 통해 예측을 수행하고 그 결과도 표시하였다.
각 모델을 통한 예측 결과
예측하고자 했던 날의 실제 주식 종가는 32050.0이고 가장 가까운 값을 출력한 모델 역시 RBF SVR 모델임을 알 수 있다.
[RBF SVR 을 통한 Lotto 당첨번호 합 예측 ]이 알고리즘을 이용하여 Lotto 1등 당첨번호의 합을 예측해봤다.
이 블로그에 “Machine Learning을 이용한 Lotto 번호 생성 프로그램” 이란 글이 있는데 여기서 6자리 1등 당첨번호의 합을 예측하고 이 합을 만족하는 조합을 찾는 프로그램에 대한 내용이다.
이 때 예측은 XGBoost 알고리즘을 이용했는데, RBF SVR을 이용한 예측 중 어느 것이 좀 더 정확할지가 궁금해져서 추가로 해 보았다.
결과는 다음과 같다.
943회차 로또 1등 번호의 합은 147이었는데 XGBoost 알고리즘은 118을 예측했고, RBF SVR은 다음의 경향과 함께 148.47을 예측하였다.
각 모델의 출력 각 모델을 통한 예측 결과
위의 각 모델별 출력을 보면 선형이나 Polynomial 보다는 RBF 모델이 좋아 보이지만 그렇다고 주식 종가에 대한 결과에 비해 Lotto 데이터는 확실히 경향을 확인할 수 없다.
그러나 예측 결과에 있어서는 거의 유사한 숫자를 예측했는데 운이 좋았다고 볼 수 있다.
반응형
[파이썬 머신러닝 완벽 가이드] 회귀 실습(기본) – 자전거 대여 수요 예측
데이터 셋 : https://www.kaggle.com/c/bike-sharing-demand/data 에서 train.csv파일을 bike_train.csv로 저장한 뒤 실습을 진행한다.
데이터 셋의 피처들을 확인하면
datatime : 날짜
season : 1 = 봄, 2 = 여름, 3 = 가을, 4 = 겨울
holiday : 1 = 주말 및 휴일, 0 = 평일
workingday: 1 = 주중, 0 = 주말 및 휴일
weather : 1 = 맑음, 약간 구름 낀 흐림, 2 = 안개, 안개 + 흐림, 3 = 가벼운 눈, 가벼운 비 + 천둥, 4 = 심한 눈/비, 천둥/번개
temp : 온도(섭씨)
atem : 체감 온도(섭씨)
humidity : 상대 습도
windspeed : 풍속
casual : 미등록 사용자 대여수
registered : 등록된 사용자 대여수
count : 대여 횟수(casual + registered)
import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline import warnings warnings.filterwarnings(“ignore”, category = RuntimeWarning) bike_df = pd.read_csv(“bike_train.csv”) print(bike_df.shape) bike_df.head()
필요한 라이브러리들을 import 하고 bike_train.csv 파일을 DataFrame 데이터형으로 만들어서 어떻게 되어있는지 확인한다.
bike_df.info()
각 칼럼들의 데이터 타입을 확인하고 NaN 값이 존재하는지 확인한다.
(간략하게 널값이 있는지 없는지 확인하는 것이고, 이후에 조금 더 세밀하게 확인할 필요가 있다. )
datetime
bike_df.info()를 통해서 피처들의 데이터 타입을 확인해 보면 ‘datetime’ 피처를 제외하고는 모두 숫자형 데이터인것을 확인할 수 있다. datetime은 날짜와 시간을 표시하고 있는 string 데이터 타입을 가진 피처이다.
데이터 가공을 쉽게 하기 위해서 string으로 되어 있는 데이터를 datetime 데이터 형으로 전환한다.
# 문자열을 datetime 타입으로 변경 bike_df[‘datetime’] = bike_df.datetime.apply(pd.to_datetime) # datetime 타입에서 년, 월, 일, 시간 추출 bike_df[‘year’] = bike_df.datetime.apply(lambda x : x.year) bike_df[‘month’] = bike_df.datetime.apply(lambda x : x.month) bike_df[‘day’] = bike_df.datetime.apply(lambda x : x.day) bike_df[‘hour’] = bike_df.datetime.apply(lambda x : x.hour) bike_df.head(3)
pd.to_datetime의 함수를 통해서 datetime 데이터 형으로 전환되고, 이 데이터 타입을 이용해서 쉽게 년,월,일,시의 정보를 추출할 수 있다.
필요없는 피처 삭제하기
위에서 datetime 칼럼을 통해서 년, 월, 일, 시의 정보를 별도의 피처로 만들어 데이터 프레임에 추가하였으므로 datetime 피처는 더이상 필요하지 않다. 또한, casual과 registered 두 피처를 더하면 label data인 count이기 때문에, 학습할 때 이 두 피처를 포함하는 것은 오히려 학습 모델이 Overfitting되도록 한다. 그래서 datetime, casual, registered 세가지의 피처를 삭제한다.
drop_columns = [‘datetime’, ‘casual’, ‘registered’] bike_df.drop(drop_columns, axis = 1, inplace = True)
평가지표
캐글에서 요구한 성능 평가 방법은 RMSLE(Root Mean Squared Log Error)이다.
여기에서 log 안에 +1을 해주는 이유는 p나 a의 값이 0일 때 음의 무한대여서 언더플로우가 발생하는 것을 방지하기 위함이다.
RMSLE의 장점 :
아웃라이어가 있더라도 크게 영향을 받지 않는다.
상대적 Error를 측정
Under Estimation에 큰 페널티를 부여
사이킷런에서는 RMSLE를 제공하지 않아 함수를 직접 만들어야 한다.
from sklearn.metrics import mean_squared_error, mean_absolute_error # log 값 변환 시 NaN 등의 이슈로 log()가 아닌 log1p()를 이용해 RMSLE 계산 def rmsle(y, pred): log_y = np.log1p(y) log_pred = np.log1p(pred) squared_error = (log_y – log_pred)**2 rmsle = np.sqrt(np.mean(squared_error)) return rmsle def rmse(y, pred): return np.sqrt(mean_squared_error(y, pred)) #MSE, RMSE, RMSLE를 모두 계산 def evaluate_regr(y, pred): rmsle_val = rmsle(y, pred) rmse_val = rmse(y, pred) #MAE는 사이킷런의 mean_absolute_error()로 계산 mae_val = mean_absolute_error(y, pred) print(“RMSLE: {0:.3f}, RMSE : {1:.3f}, MAE : {2:.3f}”.format(rmsle_val, rmse_val, mae_val))
마지막 evaluate_regr은 RMSLE, RMSE, MAE를 한꺼번에 출력하는 함수이다.
타깃 데이터의 로그 변환
회귀 모델을 적용하기 전에 데이터 세트에 대해서 먼저 처리해야 할 사항 2가지
결괏값(타깃 데이터)이 정규 분포로 되어 있는가?
카테고리형 데이터 셋을 One-Hot Encoding을 수행하였는가?
먼저 Linear Regression 모델을 통해서 회귀 예측을 하면
from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.linear_model import LinearRegression, Ridge, Lasso y_target = bike_df[‘count’] X_features = bike_df.drop([‘count’], axis = 1, inplace = False) X_train, X_test, y_train, y_test = train_test_split(X_features, y_target, test_size = 0.3, random_state = 0) lr_reg = LinearRegression() lr_reg.fit(X_train, y_train) pred = lr_reg.predict(X_test) evaluate_regr(y_test, pred)
이렇게 모델을 학습하여 예측했을 때, 평가지표는 RMSLE: 1.165, RMSE : 140.900, MAE : 105.924로 나오게 된다.
이 평가 지표는 예측 오류로서는 큰 값이므로, 현재 데이터가 제대로 전처리되지 않은 부분이 존재한다는 것을 시사한다.
실제 값과 예측 값의 차이가 가장 큰 데이터 5개를 확인하는 코드를 짜보자.
# 실제값과 예측 값이 어느 정도 차이가 나는지 DF의 칼럼으로 만들어서 오류 값이 가장 큰 순으로 5개 확인 def get_top_error_data(y_test, pred, n_tops = 5): #DF의 칼럼으로 실제 대여 횟수(Count)와 예측값을 서로 비교할 수 있도록 생성. result_df = pd.DataFrame(y_test.values, columns = [‘real_count’]) result_df[‘predicted_count’] = np.round(pred) result_df[‘diff’] = np.abs(result_df[‘real_count’] – result_df[‘predicted_count’]) #예측값과 실제 값이 가장 큰 데이터 순으로 출력 print(result_df.sort_values(‘diff’, ascending = False)[:n_tops]) get_top_error_data(y_test, pred, n_tops = 5)
실제 자전거 대여 횟수와 예측 자전거 대여 횟수가 500회 이상 차이가 나는 것을 통해서 예측 오류가 크다는 것을 확인할 수 있다. 이렇게 큰 예측 오류가 발생한다면 가장 먼저 살펴볼 것은 타깃값의 분포가 정규 분포를 따르고 있는지 확인하는 것이다.
타깃 데이터의 분포를 확인해보자.
y_target.hist()
0 ~ 200 사이에 타깃 데이터가 몰려 있는 것을 확인할 수 있다. 이렇게 한쪽으로 쏠려 있는 분포를 나타내고 있는 경우에는 로그 변환을 통해서 정규 분포와 비슷한 형태로 변환할 수 있다.
y_log_transform = np.log1p(y_target) y_log_transform.hist()
(np.log1p() 함수를 사용한 것은 0인 데이터의 경우 언더플로우 문제가 발생할 수 있기 때문이다.)
이렇게 타깃 데이터를 변환한 후에 다시 평가를 수행해보자.
# 타깃 칼럼인 count 값을 log1p로 로그 변환 y_target_log = np.log1p(y_target) #로그 변환된 y_target_log를 반영해 학습/ 테스트 데이터 세트 분할 X_train, X_test, y_train, y_test = train_test_split(X_features, y_target_log, test_size = 0.3, random_state = 0) lr_reg = LinearRegression() lr_reg.fit(X_train, y_train) pred = lr_reg.predict(X_test) #테스트 데이터 세트의 Target 값은 로그 변환됐으므로 다시 expm1을 이용해 원래 스케일로 변환 y_test_exp = np.expm1(y_test) # 예측값 역시 로그 변환된 타깃 기반으로 학습돼 예측됐으므로, 다시 expm1로 스케일 변환 pred_exp = np.expm1(pred) evaluate_regr(y_test_exp, pred_exp)
타깃 데이터와 예측값 모두 로그 변환이 되어 있는 상태이므로, 예측까지 진행한 후에 평가 지표를 계산하기 위해서는 다시 np.expm1() 함수를 통해서 실제 값으로 변환해주어야 한다.
평가 지표를 확인해보면, RMSLE: 1.017, RMSE : 162.594, MAE : 109.286 이 나오게 된다.
적절한 조치를 취해 주었지만, 성능 지표가 좋아지지 않거나, 오히려 더 낮은 성능을 보이는 경우가 있다. 이런 경우에는 해당 전처리 과정이 잘못되었을 수도 있지만, 다른 전처리 과정이 추가적으로 필요한 경우도 있다.
One-Hot Encoding
선형 회귀 모델이 학습의 과정을 거쳐 각 피처에 대한 계수를 산출했을 때, 해당 계수가 크다면, 그만큼 결과에 큰 영향을 끼치는 피처라는 것을 의미한다.
따라서, 각 피처의 회귀 계수 값을 시각화해보자.
coef = pd.Series(lr_reg.coef_, index = X_features.columns) coef_sort = coef.sort_values(ascending = False) sns.barplot(x= coef_sort.values, y = coef_sort.index)
Year 피처의 회귀 계수 값이 독보적으로 큰 계수 값을 가지고 있다.
하지만 연도에 따라서 자전거 대여 횟수가 크게 영향을 받는다는 것은 논리에 맞지 않는다.
이렇게 많은 영향을 받는 이유는 year 피처는 연도를 뜻하므로 카테고리 형 피처지만 숫자형 값으로 되어있다. 이처럼 숫자형 카테고리 값을 선형 회귀에 사용할 경우 회귀 계수를 연산할 때 이 숫자형 값에 크게 영향을 받는 경우가 발생할 수 있다. 이런 경우에는 원-핫 인코딩을 적용해 변환한다.
각 피처의 의미를 이해해야 적절한 전처리 과정을 판단할 수 있다.
# ‘year’ ,’month’,’day’,’hour’ 등의 피처를 One-Hot Encoding X_features_ohe = pd.get_dummies(X_features, columns = [‘year’,’month’,’day’,’hour’,’holiday’,’workingday’,’season’,’weather’])
#원-핫 인코딩이 적용된 피처 데이터 세트 기반으로 학습/예측 데이터 분할 X_train, X_test, y_train, y_test = train_test_split(X_features_ohe, y_target_log, test_size = 0.3, random_state = 0) #모델과 학습/ 테스트 데이터 세트를 입력하면 성능 평가 수치를 반환 def get_model_predict(model, X_train, X_test, y_train, y_test, is_expm1=False): model.fit(X_train, y_train) pred = model.predict(X_test) if is_expm1 : y_test = np.expm1(y_test) pred = np.expm1(pred) print(“###”, model.__class__.__name__, ‘###’) evaluate_regr(y_test, pred) #end of function get_model_predict # 모델별로 평가 수행 lr_reg = LinearRegression() ridge_reg = Ridge(alpha = 10) lasso_reg = Lasso(alpha = 0.01) for model in [lr_reg, ridge_reg, lasso_reg]: get_model_predict(model, X_train, X_test, y_train, y_test, is_expm1=True)
One-Hot Encoding을 수행한 결과 예측 오류가 2/3정도로 줄어든 것을 확인할 수 있다. 이번에는 어떤 피처가 예측 결과에 큰 영향을 주는지 계수 값이 큰 피처 상위 25개를 선별하여 시각화해보자.
coef = pd.Series(lr_reg.coef_, index = X_features_ohe.columns) coef_sort = coef.sort_values(ascending= False)[:25] sns.barplot(x = coef_sort.values, y = coef_sort.index)
회귀 트리 모델을 이용하여 예측
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor from xgboost import XGBRegressor from lightgbm import LGBMRegressor # 랜덤 포레스트, GBM, XGBoost, LightGBM model 별로 평가 수행 rf_reg = RandomForestRegressor(n_estimators = 500) gbm_reg = GradientBoostingRegressor(n_estimators = 500) xgb_reg = XGBRegressor(n_estimators = 500) lgbm_reg = LGBMRegressor(n_estimators = 500) for model in [rf_reg, gbm_reg, xgb_reg, lgbm_reg]: # XGBoost의 경우 DF이 입력될 경우 버전에 따라 오류 발생 가능. ndarray로 변환 get_model_predict(model, X_train.values, X_test.values, y_train.values, y_test.values, is_expm1= True)
이전에 배웠던 여러가지 회귀 트리 모델들을 이용해서 학습 및 예측을 수행한 후에 성능 지표를 확인해보자.
One-Hot Encoding을 수행한 후 예측했을 때보다 오류가 절반정도로 줄어든 것을 확인할 수 있다. 하지만, 항상 회귀 트리 모델이 선형 회귀 모델보다 더 좋은 성능을 낸다는 것을 보장하지는 않는다. 데이터에 따라서 더 좋은 성능을 보이는 모델이 다르므로, 실제 데이터 분석을 하는 경우에는 많은 모델들을 사용하여 학습 및 예측을 수행하고 성능을 비교해야 한다.
reference :파이썬 머신러닝 완벽 가이드
https://bkshin.tistory.com/entry/머신러닝-17-회귀-평가-지표
https://ahnjg.tistory.com/90
So you have finished reading the 파이썬 예측 알고리즘 topic article, if you find this article useful, please share it. Thank you very much. See more: 머신러닝 예측 모델 예제, 주가 예측 알고리즘, 딥러닝 예측 알고리즘, 머신러닝 예측 모델 종류, 파이썬 머신러닝 예측, 회귀 문제 예시, 머신러닝 모델 선택 기준, 딥러닝 예측 모델 종류