Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 피보나치수열
- 소인수분해
- 비교연산자
- #java_festival
- plusgame
- 증감연산자
- 복합대입연산자
- switch문
- 별찍기
- switch-case문
- 팩토리얼
- #알고리즘
- #완전수구하기
- JAVA기초
- 논리연산자
- for문 369게임
- 삼항 연산자
- if문
- 2차원배열
- 로또 프로그램
- else if문
- java조건문
- 연산자
- 이진수
- java
- 변수의특징
- 알고리즘
- 데이터타입
- #이차원배열
- #Java
Archives
- Today
- Total
숭어 개발 블로그
[머신러닝] Linear Model 본문
Linear Model - Regression [ MSE : Min Squared Error ]
입력 특성 (컬럼) 에 대한 선형함수 ( 선=예측값 ) 를 만들어 예측을 수행하는 모델
평균제곱오차(Mean Squared Error, MSE) : 이름에서 알 수 있듯이 오차(error)를 제곱한 값의 평균입니다. 오차란 알고리즘이 예측한 값과 실제 정답과의 차이를 의미합니다.
오차 : 타깃값과 예측값의 기울기 차이
h(x) = Wx + b ==> 가설함수
(예측값 -실제값) => 오차
오차**2 의 평균값을 구한다.
=> cost (비용,loss)
#Linear Model
- 입력 특성 (컬럼) 에 대한 선형함수 ( 선=예측값 ) 를 만들어 예측을 수행하는 모델
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.DataFrame([[2,20],
[4,40],
[8,80],
[9,90]], index = ['태양','병관','명훈','해도'],
columns = ['시간', '성적'])
data
# MSE ( 평균제곱오차 ) 값을 찾는 2가지 방법
## Linear Regression (수학공식을 이용한 해석적 모델)
from sklearn.linear_model import LinearRegression
l_model = LinearRegression()
l_model.fit(data[['시간']],data['성적']) # 문제 2차원으로 넣어야 하기떄문에 [[]]fh df로 만들어준다 Series안됨
print(l_model.coef_) # 가중치 (w)
print(l_model.intercept_) # 절편 (b)
l_model.predict([[7]])
data['시간'].values.reshape(4,1) # .reshape( 행의수, 열의수 ) ==> 2차원 데이터로 만들기
l_model.predict(data['시간'].values.reshape(4,1))
plt.plot(data['시간'],data['성적'],'*') # plt.plot(X축 리스트 , y축 리스트)
plt.plot(data['시간'],l_model.predict(data['시간'].values.reshape(4,-1)))
## 경사하강법
경사하강법
기울기가 낮은 방향으로 계속 수정
- Learning rate 큰경우 : 빠르게 이동 , 크게 크게 수정
- Learning rate 작은경우 : 조금씩 이동, 오래 걸린다.
## 경사하강법
# H(X)
# 예측값
def h(w,x) :
return w*x+0 # 절편을 0으로 주고 진행
# cost
# (시그마)(예측값-실제값)**2 의 평균
def cost(data,target, weight) :
y_pre = h(weight, data) # 예측값
return ((y_pre - target)**2).mean() # (예측값 - 실제값)**2 의 평균
cost(data['시간'],data['성적'],15)
weight_arr = range(-10,31)
cost_list = []
for i in weight_arr :
c = cost(data['시간'],data['성적'],i)
cost_list.append(c)
cost_list
plt.plot(weight_arr,cost_list)
plt.show()
plt.plot(weight_arr,cost_list)
plt.show()
==> 포물선 형태의 함수가 나온다.
from sklearn.linear_model import SGDRegressor
s_model = SGDRegressor(max_iter = 1000, #가중치 업데이트 반복횟수 (epoch) 1000번을 다돌지 않고 의미가 없다고 생각되면 멈춘다.
eta0 = 0.01, #학습률 (1 이하의 값)
verbose = 1 #학습 과정 확인(1:확인 , 0:확인안함)
)
s_model.fit(data[['시간']],data[['성적']])
# Norm : 가중치 , Biase :절편
s_model.predict([[7]])
print(s_model.coef_) # 기울기
print(s_model.intercept_) # 절편
Linear Model 장점
Linear Model 단점
'Machine Learning > 선형 회귀' 카테고리의 다른 글
[머신러닝] Boston 주택 값 예측 (2) _4.정규화 L1(Lasso) , L2(Ridge) (1) | 2022.09.21 |
---|---|
[머신러닝] Boston 주택 값 예측 (1)_1.데이터분리/2.학습/3.평가 (1) | 2022.09.21 |
Comments