선형 회귀 깊이 연구(3방향 실현)
우리 기계 학습의 기본 개념부터 통계와 기계 학습의 세계를 구경합시다.선형 회귀는 기본적으로 특징을 대표하는 한 조의 점을 위해 하나의 선을 의합하는 것을 의미한다.
선형 회귀는 ML뿐만 아니라 통계학에도 중요하다.통계학에서 최소 2승 추정 방법은 최소화점과 회귀선의 최소 2승 거리를 통해 근사선형 회귀의 해에 사용된다.
가설 함수는 의합선의 방정식을 나타낸다.여기서 θ-0과 θ-1은 회귀선의 매개 변수를 나타낸다.직선 y=mx+c의 방정식에서 m는 사율이고 c는 직선의 y 간격이다.주어진 방정식에서 θ-0은 y단거리이고 θ-1은 회귀선의 사율이다.
주의-여기서 우리가 처리하는 것은 독립 변수 x이다.
원가 함수는 적당하고 가장 좋은 선을 얻기 위해 우리가 반드시 최소화해야 하는 함수이다.여기서 hθ와 y 사이의 차이를 오차라고 한다.우리는 균형 오차를 원가 함수로 삼을 것이다.
θ-0과 θ-1의 값을 계산하기 위해 아래에 등식을 제시하였다.우리는 이런 방정식 계산 값을 사용하는데, 이런 방법을 최소 2승 추정 방법이라고 부른다.
여기서 우리는 각 견본의 특징(자변수)을 x-i로 표시하고 그 평균값은 x-bar로 표시한다.그 밖에 모든 견본의 출력(변수에 따라)은 y-i이고 그 평균값은 y-bar이다.견본의 총수는 n이다.
상술한 방정식을 응용한 후에 우리는 산란점의 가장 좋은 의합선을 찾을 수 있다.이python 코드는 아래와 같습니다.
import numpy as np
import matplotlib.pyplot as plt
def estimate_coef(x, y):
n = np.size(x)
m_x, m_y = np.mean(x), np.mean(y)
SS_xy = np.sum(y*x) - n*m_y*m_x
SS_xx = np.sum(x*x) - n*m_x*m_x
theta_1 = SS_xy / SS_xx
theta_0 = m_y - theta_1*m_x
return(theta_0, theta_1)
def plot_regression_line(x, y, theta):
plt.scatter(x, y, color = "b",marker = "o", s = 30)
y_pred = theta[0] + theta[1]*x
plt.plot(x, y_pred, color = "r")
plt.xlabel('x')
plt.ylabel('y')
plt.show()
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([11 ,13, 12, 15, 17, 18, 18, 19, 20, 22])
theta = estimate_coef(x, y)
print("Estimated coefficients:\ntheta_0 = {} \ntheta_1 = {}".format(theta[0], theta[1]))
plot_regression_line(x, y, theta)
print(round(theta[0]+ theta[1]*11,4))
출력
기계 학습에서 같은 선형 회귀 문제는 세 가지 다른 방법으로 해결할 수 있다.
방법은 다음과 같습니다. -
scikit로 학습하는 선형 회귀
가장 간단한 방법은 내장된 라이브러리 함수를 사용하는 것이다.코드는 아래와 같다.사용된 데이터 집합은 상술한 데이터 집합과 같다.직선을 맞춘 후, 우리는 x=11의 y값을 찾았다.우리는 사용할 모든 다른 방법을 위해 같은 데이터 집합과 입력 값을 사용할 것이다.
LinearRegression() 함수는 형태(n_개 샘플, n_개 특징)와 (n_개 샘플, n_개 목표)의 희소 행렬로 입력 매개 변수를 가져옵니다.
import numpy as np;
from sklearn.linear_model import LinearRegression;
x = np.array([[0], [1],[2], [3], [4], [5], [6], [7], [8], [9]])
y = np.array([[11], [13], [12], [15], [17], [18], [18], [19], [20], [22]])
LR=LinearRegression()
LR.fit(x,y)
b=LR.predict(np.array([[11]]))
print(round(b[0][0],4))
출력
24.103
사다리가 내려가는 선형 회귀를 사용하다
사다리의 하락은 기계 학습에서 서로 다른 철 함수를 최적화하는 데 가장 자주 사용하는 방법 중의 하나다.우리는 최소 2승법에서 제시한 원가 함수(인자차 1/2)와 유사한 원가 함수가 철 함수라는 것을 알고 있기 때문에 우리는 사다리 하락법을 사용하여 이 문제를 해결할 것이다.우리는 회귀선의 θ값을 찾기 위해 원가 함수를 최소화해야 한다.
사다리 하강법은
θ-0과 θ-1의 값을 동시에 업데이트할 수 없기 때문에 임시 변수를 사용합니다
import numpy as np;
from matplotlib import pyplot as plt;
# Function for cost function
def cost(z,theta,y):
m,n=z.shape;
htheta = z.dot(theta.transpose())
cost = ((htheta - y)**2).sum()/(2.0 * m);
return cost;
def gradient_descent(z,theta,alpha,y,itr):
cost_arr=[]
m,n=z.shape;
count=0;
htheta = z.dot(theta.transpose())
while count<itr:
htheta = z.dot(theta.transpose())
a=(alpha/m)
# Using temporary variables for simultaneous updation of variables
temp0=theta[0,0]-a*(htheta-y).sum();
temp1=theta[0,1]-a*((htheta-y)*(z[::,1:])).sum();
theta[0,0]=temp0;
theta[0,1]=temp1;
cost_arr.append(float(cost(z,theta,y)));
count+=1;
cost_log = np.array(cost_arr);
plt.plot(np.linspace(0, itr, itr, endpoint=True), cost_log)
plt.xlabel("No. of iterations")
plt.ylabel("Error Function value")
plt.show()
return theta;
x = np.array([[0], [1],[2], [3], [4], [5], [6], [7], [8], [9]])
y = np.array([[11], [13], [12], [15], [17], [18], [18], [19], [20], [22]])
m,n=x.shape;
z=np.ones((m,n+1),dtype=int);
z[::,1:]=x;
theta=np.array([[21,2]],dtype=float)
theta_minimised=gradient_descent(z,theta,0.01,y,10000)
new_x=np.array([1,11])
predicted_y=new_x.dot(theta_minimised.transpose())
print(round(predicted_y[0],4));
출력
위역 방법의 선형 회귀를 사용하다
몰 펜로스 역법(위역법)의 상황에서 θ의 방정식을 구하는 것은 다음과 같다.
θ=(X′X)−1X′y
\θ=(X'X)^{−1} X'y 회사
θ=(X′X)−1X′y
그것은 아래에 제시된 코드에서 실현된다.
import numpy as np;
# Input Matrix
x= np.array([[0], [1],[2], [3], [4], [5], [6], [7], [8], [9]])
# Output Matrix
y= np.array([[11], [13], [12], [15], [17], [18], [18], [19], [20], [22]])
m,n=x.shape;
# Adding extra ones for the theta-0 or bias term
z=np.ones((m,n+1),dtype=int);
z[:,1:]=x; # z is Input matrix with added 1s
mat=np.matmul(z.transpose(),z); # product of z and z transpose
matinv=np.linalg.inv(mat) #inverse of above product
val=np.matmul(matinv,z.transpose()) # Product of inverse and z transpose
theta=np.matmul(val,y) # Value of theta by multiplying value calculated above to y
new_x=np.array([1,11]);
predicted_y=new_x.dot(theta);
print(round(predicted_y[0],4));
출력
24.103
선형 회귀를 학습한 후에 우리는 이를 일부 실제 데이터 집합에 응용할 것이다.우리가 사용할 데이터 세트는 Boston dataset 입니다.
그것은 506개의 견본과 13개의 특징을 가지고 있으며, 한 열은 출력열로 한다.14열을 내보냅니다.다음은 보스턴 데이터 집합의 예시 코드다.
import numpy as np;
from sklearn.linear_model import LinearRegression;
x = np.array([[0], [1],[2], [3], [4], [5], [6], [7], [8], [9]])
y = np.array([[11], [13], [12], [15], [17], [18], [18], [19], [20], [22]])
LR=LinearRegression()
LR.fit(x,y)
b=LR.predict(np.array([[11]]))
print(round(b[0][0],4))
24.103
사다리의 하락은 기계 학습에서 서로 다른 철 함수를 최적화하는 데 가장 자주 사용하는 방법 중의 하나다.우리는 최소 2승법에서 제시한 원가 함수(인자차 1/2)와 유사한 원가 함수가 철 함수라는 것을 알고 있기 때문에 우리는 사다리 하락법을 사용하여 이 문제를 해결할 것이다.우리는 회귀선의 θ값을 찾기 위해 원가 함수를 최소화해야 한다.
사다리 하강법은
θ-0과 θ-1의 값을 동시에 업데이트할 수 없기 때문에 임시 변수를 사용합니다
import numpy as np;
from matplotlib import pyplot as plt;
# Function for cost function
def cost(z,theta,y):
m,n=z.shape;
htheta = z.dot(theta.transpose())
cost = ((htheta - y)**2).sum()/(2.0 * m);
return cost;
def gradient_descent(z,theta,alpha,y,itr):
cost_arr=[]
m,n=z.shape;
count=0;
htheta = z.dot(theta.transpose())
while count<itr:
htheta = z.dot(theta.transpose())
a=(alpha/m)
# Using temporary variables for simultaneous updation of variables
temp0=theta[0,0]-a*(htheta-y).sum();
temp1=theta[0,1]-a*((htheta-y)*(z[::,1:])).sum();
theta[0,0]=temp0;
theta[0,1]=temp1;
cost_arr.append(float(cost(z,theta,y)));
count+=1;
cost_log = np.array(cost_arr);
plt.plot(np.linspace(0, itr, itr, endpoint=True), cost_log)
plt.xlabel("No. of iterations")
plt.ylabel("Error Function value")
plt.show()
return theta;
x = np.array([[0], [1],[2], [3], [4], [5], [6], [7], [8], [9]])
y = np.array([[11], [13], [12], [15], [17], [18], [18], [19], [20], [22]])
m,n=x.shape;
z=np.ones((m,n+1),dtype=int);
z[::,1:]=x;
theta=np.array([[21,2]],dtype=float)
theta_minimised=gradient_descent(z,theta,0.01,y,10000)
new_x=np.array([1,11])
predicted_y=new_x.dot(theta_minimised.transpose())
print(round(predicted_y[0],4));
출력
위역 방법의 선형 회귀를 사용하다
몰 펜로스 역법(위역법)의 상황에서 θ의 방정식을 구하는 것은 다음과 같다.
θ=(X′X)−1X′y
\θ=(X'X)^{−1} X'y 회사
θ=(X′X)−1X′y
그것은 아래에 제시된 코드에서 실현된다.
import numpy as np;
# Input Matrix
x= np.array([[0], [1],[2], [3], [4], [5], [6], [7], [8], [9]])
# Output Matrix
y= np.array([[11], [13], [12], [15], [17], [18], [18], [19], [20], [22]])
m,n=x.shape;
# Adding extra ones for the theta-0 or bias term
z=np.ones((m,n+1),dtype=int);
z[:,1:]=x; # z is Input matrix with added 1s
mat=np.matmul(z.transpose(),z); # product of z and z transpose
matinv=np.linalg.inv(mat) #inverse of above product
val=np.matmul(matinv,z.transpose()) # Product of inverse and z transpose
theta=np.matmul(val,y) # Value of theta by multiplying value calculated above to y
new_x=np.array([1,11]);
predicted_y=new_x.dot(theta);
print(round(predicted_y[0],4));
출력
24.103
선형 회귀를 학습한 후에 우리는 이를 일부 실제 데이터 집합에 응용할 것이다.우리가 사용할 데이터 세트는 Boston dataset 입니다.
그것은 506개의 견본과 13개의 특징을 가지고 있으며, 한 열은 출력열로 한다.14열을 내보냅니다.다음은 보스턴 데이터 집합의 예시 코드다.
import numpy as np;
# Input Matrix
x= np.array([[0], [1],[2], [3], [4], [5], [6], [7], [8], [9]])
# Output Matrix
y= np.array([[11], [13], [12], [15], [17], [18], [18], [19], [20], [22]])
m,n=x.shape;
# Adding extra ones for the theta-0 or bias term
z=np.ones((m,n+1),dtype=int);
z[:,1:]=x; # z is Input matrix with added 1s
mat=np.matmul(z.transpose(),z); # product of z and z transpose
matinv=np.linalg.inv(mat) #inverse of above product
val=np.matmul(matinv,z.transpose()) # Product of inverse and z transpose
theta=np.matmul(val,y) # Value of theta by multiplying value calculated above to y
new_x=np.array([1,11]);
predicted_y=new_x.dot(theta);
print(round(predicted_y[0],4));
24.103
Repl 편집기에 약간의 인내심을 가지고 있습니다.이 문장을 좋아하시길 바랍니다
Reference
이 문제에 관하여(선형 회귀 깊이 연구(3방향 실현)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/amananandrai/a-deep-dive-into-linear-regression-3-way-implementation-3jb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)