見出し画像

線形回帰で次の予測値を得る

#学習 #勉強 #Python #プログラミング
とりあえず動作や課題を置いておいて、LinearRegressionで数値を予測するコードが出来ました。

#csvをデータフレームとして利用するために読み込みます
import pandas as pd

#機械学習用のライブラリ
from sklearn.linear_model import LinearRegression

#Matplotlibは 、科学技術計算向けのグラフを描いてくれるライブラリ。
#from matplotlib import pyplot as plt


#学習用データと予測用数列を作成する関数
#内容 1次元配列のStringOfNumbersとIntervalを元に、学習用データと正解データを作る
# この関数は、学習データと正解データの生成の他に
# 予測のための、学習データを生成する
# 予測のための、学習データを作成するとき、StringOfNumbersの最後にはダミーの数値を入れること
#制限 StringOfNumbersの配列は、Intervalの数より多くないと、戻り値を生成しない
#引数 StringOfNumbers[] 1元配列で、予測のための数値を格納する
# Interval 学習に利用する配列の数
#戻値 DataForLearning[[]] 2次元配列で、Intervalの数だけ予測データをまとめる
# AnswerData[] 1次元配列で、学習用の正解データが入る
#
#解説 1,2,3,4,5,6と3を指定して起動 => [[1,2,3],[2,3,4],[3,4,5]]と[4,5,6]に変換する
def make_data(StringOfNumbers,Interval):
#interval前のデータを学習させるための配列
DataForLearning = []

#答えとなる配列
AnswerData = []

#NumberOfArraysは0からStringOfNumbersの数だけ処理を繰り返す
#指定された数列全部を処理する
for NumberOfArrays in range(len(StringOfNumbers)):

#繰り返しの数 、Intervalより小さい場合、以降の処理を省略する
if NumberOfArrays < Interval:
continue

#配列AnswerDataに現在の数値を追記する
#Intervalの数以上の数列が対象となる
AnswerData.append(StringOfNumbers[NumberOfArrays])

#配列Lumpの作成 、DataForLearningへの2次元配列を作るために作業用として使う
Lump = []

#NumberForLearningは0からintervalの数まで繰り返される
#今日よりinterval日前のデータを揃える
for NumberForLearning in range(Interval):

#NumberOfArraysはinterval以上になるので 、TemporaryPositionの値がマイナスになることはない
TemporaryPosition = NumberOfArrays + NumberForLearning - Interval

##配列xaに指定された気温を格納
Lump.append(StringOfNumbers[TemporaryPosition])

#interval日前のデータが揃ったので 、2次元配列に追加
DataForLearning.append(Lump)

#戻り値の指定
return (DataForLearning, AnswerData)


def main():

#計算用のCSVをロードする
df = pd.read_csv('csv.csv', names=('ds', 'y'),dtype = {'ds':'object', 'y':'float64' })

#過去interval回数分を学習するデータを作成
#過去10回分からの学習とする
interval = 10

#受け渡された構造体から、数値の部分のみ利用する
#時間のことは計算に含めない
only_y = list(df["y"])


#学習用データを作成する
#1次元配列と学習用過去の回数を指定
#2次元配列の学習用データと、1次元配列の正解データに分ける
train_x, train_y = make_data(only_y,interval)

#グラフ表示のために0から配列の数だけ数列を作る
#ReferenceNumbers =[]
#for i in range(len(train_y)):
# ReferenceNumbers.append(i)

#グラフの表示
#X軸は順番 、Y軸は正解データの表示
#plt .plot(ReferenceNumbers,train_y)

#こちらはグラフに表示するタイトルや軸名など
#plt .title('Graph')
#plt .ylabel('weight')
#plt .xlabel('Number ')

#グラフ表示 (の前に表示している気がする)
#plt .show()


#学習開始
#線形回帰を使うことを宣言
regressor = LinearRegression()

#学習用データと正解データを与えて 、予測の元となる計算方法を考えさせる
regressor.fit(train_x, train_y)


#未来の数値を予測 (今日の時点で)

#予測のための数値を作る
SourceOfPrediction = []

#数列の数を調べる
PositionOfPredictionData=len(only_y)

#数列の数から 、インターバル分を取る
PositionOfPredictionData=PositionOfPredictionData-interval

#予測のための数値を数列の末端部分を加える
for point in range(interval):
SourceOfPrediction.append(only_y[PositionOfPredictionData+point])


#ダミーデータを取り付ける
#ダミーデータは予測のための材料には含まれない
#また 、正解データにダミーデータが入るが、使わない
SourceOfPrediction.append(0)

#予測のためのデータを作成する
train_x2, train_y2 = make_data(SourceOfPrediction,interval)


#予測値を計算する
y_pred_abc = regressor.predict(train_x2)
#print (X_cnv2)

#予測値の表示
print(y_pred_abc)

return


#最後にチラチラとmainを呼び出す
main()
input()


とりあえず、動作はしていますが、気になる部分があります

今日は、ここまでとします。

この記事が気に入ったらサポートをしてみませんか?