<jupyter_start><jupyter_text>RSS(단순 오차제곱합)`Residual Sum of Squares` 회귀 알고리즘을 위한 다양한 평가 지표 중 가장 기본적인 Loss Function1. 실제값과 예측값의 단순 오차 제곱 합 2. 값이 작을수록 모델의 성능이 높음 3. 전체 데이터에 대한 실제 값과 예측하는 값의 오차 제곱의 총합* 가장 간단한 평가 방법으로 직관적인 해석이 가능함  * 그러나 오차를 그대로 이용하기 때문에 입력값의 크기에 의존적<jupyter_code>import matplotlib.pyplot as plt
import numpy as np


from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression<jupyter_output><empty_output><jupyter_text>데이터 생성<jupyter_code>def load_data():
    
    np.random.seed(0)
    
    X = 5*np.random.rand(100,1)
    y = 3*X + 5*np.random.rand(100,1)
     
    train_X, test_X, train_y, test_y = train_test_split(X,y,test_size=0.3, random_state=0)
    
    return train_X, train_y, test_X, test_y<jupyter_output><empty_output><jupyter_text>모델 생성 및 학습<jupyter_code>def Linear_Regression(train_X, train_y):
    
    lin_reg = LinearRegression()
    
    lin_reg.fit(train_X,train_y)
    
    return lin_reg<jupyter_output><empty_output><jupyter_text>RSS 계산<jupyter_code>def return_RSS(test_y, predicted):
    
    RSS = np.sum(np.square(test_y - predicted))
    # RSS = np.sum((test_y - predicted)**2)
    # np.square  뺀 값을 제곱 or **2 실행
    return RSS<jupyter_output><empty_output><jupyter_text>시각화<jupyter_code>def plotting_graph(test_X, test_y, predicted):
    plt.scatter(test_X,test_y)
    plt.plot(test_X, predicted, color='r')
    
    plt.savefig("result_rss.png")<jupyter_output><empty_output><jupyter_text>결과<jupyter_code>def main():
    
    train_X, train_y, test_X, test_y = load_data()
     
    lin_reg = Linear_Regression(train_X, train_y)
    
    predicted = lin_reg.predict(test_X)
    
    RSS = return_RSS(test_y, predicted)
    print("> RSS :",RSS)
    
    plotting_graph(test_X, test_y, predicted)

if __name__=="__main__":
    main()<jupyter_output>> RSS : 62.67199129973386<jupyter_text>---  코드 정리<jupyter_code>import matplotlib.pyplot as plt
import numpy as np

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# 데이터 X와 y를 생성하고, 학습용 데이터와 테스트용 데이터로 분리하여 반환하는 함수
def load_data():
    
    np.random.seed(0)
    
    X = 5*np.random.rand(100,1)
    y = 3*X + 5*np.random.rand(100,1)
     
    train_X, test_X, train_y, test_y = train_test_split(X,y,test_size=0.3, random_state=0)
    
    return train_X, train_y, test_X, test_y

# 회귀 모델을 불러오고, 불러온 모델을 학습용 데이터에 맞춰 학습시켜 반환
def Linear_Regression(train_X, train_y):
    
    lin_reg = LinearRegression()
    
    lin_reg.fit(train_X,train_y)
    
    return lin_reg
    
"""
1. RSS(Residual Sum of Squares)를 계산하여
   반환하는 함수
"""
def return_RSS(test_y, predicted):
    
    RSS = np.sum(np.square(test_y - predicted))
    # RSS = np.sum((test_y - predicted)**2)
    # np.square  뺀 값을 제곱 or **2 실행
    return RSS
    
    
# 그래프로 시각화
def plotting_graph(test_X, test_y, predicted):
    plt.scatter(test_X,test_y)
    plt.plot(test_X, predicted, color='r')
    
    plt.savefig("result.png")


"""
3. 정의한 함수들을 이용한 main() 함수  
"""
def main():
    
    train_X, train_y, test_X, test_y = load_data()
     
    lin_reg = Linear_Regression(train_X, train_y)
    
    predicted = lin_reg.predict(test_X)
    
    RSS = return_RSS(test_y, predicted)
    print("> RSS :",RSS)
    
    plotting_graph(test_X, test_y, predicted)

if __name__=="__main__":
    main()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11104513064133016, 'fraction_numerical': 0.016330166270783847, 'mean_word_length': 3.6404958677685952, 'pattern_counts': {'":': 2, '<': 28, '<?xml version=': 0, '>': 31, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '265132', 'license': 'MIT', 'n_tokens_mistral': 1649, 'n_tokens_neox': 1790, 'n_words': 281, 'path': 'code/RSS_Residual Sum of Squares.ipynb', 'repo_name': 'Soooyeon-Kim/Machine-Learning', 'size': '3368'}