質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1274閲覧

Pythonサンプルコードで、個々の関数は判るのですが、構造・構成がわかりません。。

SatoshiMaruyama

総合スコア16

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/12 15:05

編集2021/01/12 15:07

以下の教本で機械学習を勉強中です。

すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方

サンプルプログラム

以下のサンプルコードですが、何度、トライしても解読不能です。。
特に(*2)がよくわかりません。。

【概要】回帰分析で明日の気温予測をするロジック

どなたか(*2)について、解説頂けないでしょうか?
個々の関数は判るのですが、構造・構成がわかりません。。

  • なぜ、学習用データを作成する関数make_data()の中で、for文2つが入れ子に入る?
  • for文それぞれの中で、特に、入れ子の入れ子にあるfor文ではなぜ、変数が多い?それぞれの変数の意味は?
  • 最後にreturn (x, y)するのは、さすがに判る。同様に、append()でデータを蓄積しているのも判る。

Python

1from sklearn.linear_model import LinearRegression 2import pandas as pd 3import numpy as np 4import matplotlib.pyplot as plt 5 6# 気温データ10年分の読み込み 7df = pd.read_csv('kion10y.csv', encoding="utf-8") 8 9# データを学習用とテスト用に分割する ---(*1) 10train_year = (df["年"] <= 2015) 11test_year = (df["年"] >= 2016) 12interval = 6 13 14# 過去6日分を学習するデータを作成 ---(*2) 15def make_data(data): 16 x = [] # 学習データ 17 y = [] # 結果 18 temps = list(data["気温"]) 19 for i in range(len(temps)): 20 if i < interval: continue 21 y.append(temps[i]) 22 xa = [] 23 for p in range(interval): 24 d = i + p - interval 25 xa.append(temps[d]) 26 x.append(xa) 27 return (x, y) 28 29 30train_x, train_y = make_data(df[train_year]) 31test_x, test_y = make_data(df[test_year]) 32 33# 直線回帰分析を行う ---(*3) 34lr = LinearRegression(normalize=True) 35lr.fit(train_x, train_y) # 学習 36pre_y = lr.predict(test_x) # 予測 37 38# 結果を図にプロット ---(*4) 39plt.figure(figsize=(10, 6), dpi=100) 40plt.plot(test_y, c='r') 41plt.plot(pre_y, c='b') 42plt.savefig('tenki-kion-lr.png') 43plt.show()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/01/12 18:49

デバッグしてみても理解出来ませんでしたか? dの値を手計算すると良いかもしれません。
guest

回答3

0

ベストアンサー

6日間の気温(x)から翌日の気温(y)を推定するので、教師データは一つのyと六つのxがセットになり、それがサンプル数分あります
中のforループは、一つのyに対応する六つのxを集めてます

変数iがyの位置、変数dがxの位置です
(位置とは、たくさんの気温のデータの中の何番目か、という意味)
変数pが0〜5と変わるので、dも変わります(i-6~i-1:yの6日前~yの前日)
ループでx用データを順番にxaにappendしてるので、中のforループが終わったら六つのx用データがxaに全部入ってます

中のループを抜けたらxaをxにappendしてます
中のループに入る前に既にyはappendされてますので、これでx, yのセットが1サンプル分揃います

これを外のループで必要なだけ繰り返します

投稿2021/01/13 00:16

編集2021/01/13 03:01
jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SatoshiMaruyama

2021/01/13 05:34

ありがとうございます。 「変数iがyの位置、変数dがxの位置です」 上記をヒントにして解決できました。
SatoshiMaruyama

2021/01/13 08:42

追記もありがとうございます。参考になりました。
guest

0

これは……サンプルが良くないと思います。確かに過去 6 日間だけを見に行ってますが、このコードである意味が全くありませんし、おそらく正しく動くコードではないのでしょうか。実際に動かしていないのでなんとも言えないのですが、見た感じ「スジ」の悪いコードだとはわかります。

投稿2021/01/12 15:36

A_kirisaki

総合スコア2853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SatoshiMaruyama

2021/01/13 05:35

確かに、初心者が理解できるコードでは無いように感じました。
guest

0

【概要】

「当日の気温」を予測する為、前日~5日前の気温データを使って予測する

【補足】

i=当日の気温
p=前日~5日前の気温データ

【詳細】

「①for i~」と、「②for p~」の関係性は以下の通り。

1.iが0~5までは、continue文によって、以降が全てスキップ(文頭に戻る)
2.iが6以上では(スキップされず)
2-1.y.appendで追加
2-2.さらに「②for p~」へ処理が進み、range(interval=6)、つまり6回ループ処理
2-3.「d = i + p - interval」は「i=6」で固定。「p=0~5」でループ。「interval=6」で固定。
2-4.x.append(xa)で追加

例)
「d = i + p - interval」⇒「d = 6 +(0~5)- 6」⇒「d = 6 +(0~5)- 6」⇒「d = 0~5

上記となる。

Python

1# 過去6日分を学習するデータを作成 ---(*2) 2def make_data(data): 3 x = [] # 学習データ 4 y = [] # 結果 5 temps = list(data["気温"]) 6 for i in range(len(temps)): 7 if i < interval: continue 8 y.append(temps[i]) 9 xa = [] 10 for p in range(interval): 11 d = i + p - interval 12 xa.append(temps[d]) 13 x.append(xa) 14 return (x, y)

投稿2021/01/13 05:33

編集2021/01/13 08:39
SatoshiMaruyama

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問