선형 회귀 깊이 연구(3방향 실현)

많은 초보자들에게 선형 회귀는 기계 학습의 기원이다.사람들은 선형 회귀에서 ML을 배우고 좋은 프로젝트를 만들기 시작했다.만약 누군가가 기계 학습의 무서운 점을 모른다고 주장한다면, 그/그녀는 틀림없이 바위 밑에서 살았을 것이다.
우리 기계 학습의 기본 개념부터 통계와 기계 학습의 세계를 구경합시다.선형 회귀는 기본적으로 특징을 대표하는 한 조의 점을 위해 하나의 선을 의합하는 것을 의미한다.

선형 회귀는 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))

출력



기계 학습에서 같은 선형 회귀 문제는 세 가지 다른 방법으로 해결할 수 있다.
방법은 다음과 같습니다. -
  • scikitlearnlibrary의 내장 선형 회귀 함수 사용
  • 사다리 하강법 사용
  • Moore-Penrose 역방법을 사용합니다.
  • 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열을 내보냅니다.다음은 보스턴 데이터 집합의 예시 코드다.

    Repl 편집기에 약간의 인내심을 가지고 있습니다.이 문장을 좋아하시길 바랍니다

    좋은 웹페이지 즐겨찾기