前提・実現したいこと
https://qiita.com/masami310/items/76e1670e72cb94876da1
こちらをもとに(厳密にはこのURLの内容はある書籍の盗用、元の書籍で学習中)、機械学習を勉強しています。
その際に、どうも理解できない処理があり、質問させていただきました。
おそらく初歩の中の初歩かと思われますが、よろしくお願いいたします。
わからない点
下のコード2番、過去6日分(説明変数) と その翌日(目的変数) をセットとした訓練用データを9年分作るの部分です。
def make_data(data): x = [] # 説明変数 y = [] # 目的変数 temps = list(data["気温"]) for i in range(len(temps)): if i < interval: continue y.append(temps[i]) xa = [] for p in range(interval): d = i + p - interval xa.append(temps[d]) x.append(xa) return (x, y)
ここで、まず、make_data関数を定義して、dataにx,yが戻り値として行くのは(なんとなく)理解しています。
問題は、tempsのあたりです。
temps = list(data["気温"])でとりあえず、temps変数を定義するのはまだわかるのですが、その後のif文で、len(temps)がもうどういう意味かわからず...。この最初のtempsは、要素数が0なのでは...?dataはまだ空だし...。tempsの中身が理解できず...。
temps定義のすぐあとにprintをすると、[#2017年までの気温データ][#2018年の気温データ]となって出てきます。
これは一体どういう処理でtempsの中身が入っているのでしょう?
全体のソースコード
Python3
## 1. 「koshigaya_kion.csv」を読み込む。 #このデータは、10年分の平均気温のデータです。以下のようなcsVになっています。 #年,月,日,気温,品質,均質 #2009,1,1,3.5,8,1 temper_data = pd.read_csv('koshigaya_kion.csv', encoding="utf-8") ## 2. 訓練用データ(2009~2017年)とテスト用データ(2018年)を作成する。 # 元データを訓練用(9年)とテスト用(1年)に一旦分離 train_year = (temper_data["年"] <= 2017) # 2017年までを訓練用 test_year = (temper_data["年"] >= 2018) # 2018年以降をテスト用 interval = 6 # 過去6日分(説明変数) と その翌日(目的変数) をセットとした訓練用データを9年分作る def make_data(data): x = [] # 説明変数 y = [] # 目的変数 temps = list(data["気温"]) for i in range(len(temps)): if i < interval: continue y.append(temps[i]) xa = [] for p in range(interval): d = i + p - interval xa.append(temps[d]) x.append(xa) return (x, y) train_x, train_y = make_data(temper_data[train_year]) # 訓練用データ test_x, test_y = make_data(temper_data[test_year]) # テスト用データ ## 3. 訓練用データを使って学習させる。 lr = LinearRegression(normalize=True) lr.fit(train_x, train_y) ## 4. テスト用データを与え、2018年(1年分)の気温を予測する。 pre_y = lr.predict(test_x) ## 5. 「予測した結果(青)」と「2018年の正解(赤)」をグラフにプロットし、結果の精度を見てみる。 plt.figure(figsize=(10, 6), dpi=100) plt.plot(test_y, c='r') plt.plot(pre_y, c='b') plt.savefig('tenki-kion-lr.png') plt.show()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/10 15:35