【python】scikit-learn에서 선형 회귀

마지막까지의 개요



지난번 에서 csv 파일을 읽고 산점도를 그렸습니다.
완성된 코드와 그림은 이런 느낌
import numpy as np
import matplotlib.pyplot as plt

data_set = np.loadtxt(
    fname="sampleData.csv",
    dtype="float",
    delimiter=",",
)

#散布図を描画 → scatterを使用する
#1行ずつ取り出して描画
#plt.scatter(x座標の値, y座標の値)
for data in data_set:
    plt.scatter(data[0], data[1])

plt.title("correlation")
plt.xlabel("Average Temperature of SAITAMA")
plt.ylabel("Average Temperature of IWATE")
plt.grid()

plt.show()




이번에 할 일


scikit-learn 를 사용하여 선형 회귀를 수행하여 회귀 직선을 그립니다.

절차



1 csv에서 x 좌표, y 좌표의 데이터 검색
#x,yのデータを別配列に格納
x = np.array(1) #numpy配列を用意
y = np.array(1) #このとき先頭にいらないデータが入っている
for data in data_set:
    x = np.append(x, data[0]) #appendでデータを追加
    y = np.append(y, data[1])
x = np.delete(x, 0,0) #先頭のいらないデータを削除
y = np.delete(y, 0,0)

2 선형 회귀를 하는 모델에 1로 취한 x, y를 넣을 수 있다
3 2로 만든 모델로 예측을 실시하여 직선을 만든다
4 matplotlib로 그리기

scikit-learn이란 무엇인가



회귀라든지 분류라든지를 해 주는 모듈입니다(자크리)
자세한 내용은 여기 → 공식 페이지

선형 회귀 모델을 사용하는 코드


# 線形回帰用のモジュールをインポート
from sklearn.linear_model import LinearRegression

#回帰直線のx座標用にnumpyのlinspaceで-10から40までの値を均等に100個用意
line_x = np.linspace(-10, 40, 100)

#scikit-learnでの最小二乗法モデルで予測式を求める
model = LinearRegression()
model = model.fit(x.reshape(-1,1), y.reshape(-1,1)) #データをモデルにいれる
model_y = model.predict(line_x.reshape(-1,1)) # 予測
plt.plot(line_x, model_y, color = 'yellow')

model = model.fit(x.reshape(-1,1), y.reshape(-1,1)) 하지만 함수의 인수에 맞게 numpy 배열의 모양을 바꾸고 있습니다.
자세한 내용은 여기

완성된 코드와 그림이 여기


import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

data_set = np.loadtxt(
    fname="sampleData.csv",
    dtype="float",
    delimiter=",",
)
#x,yのデータを別配列に格納
x = np.array(1)
y = np.array(1)
for data in data_set:
    x = np.append(x, data[0])
    y = np.append(y, data[1])
x = np.delete(x, 0,0)
y = np.delete(y, 0,0)


#散布図を描画
for data in data_set:
    plt.scatter(data[0], data[1])


#scikit-learnでの最小二乗法モデルで予測式を求める
model = LinearRegression()
model = model.fit(x.reshape(-1,1), y.reshape(-1,1))
line_x = np.linspace(-10, 40, 100)
model_y = model.predict(line_x.reshape(-1,1))
plt.plot(line_x, model_y, color = 'yellow')

plt.title("correlation")
plt.xlabel("Average Temperature of SAITAMA")
plt.ylabel("Average Temperature of IWATE")
plt.grid()

plt.show()




그럼 고마워.

좋은 웹페이지 즐겨찾기