スパルタ-機械学習1週間
9039 ワード
1.概要
アルゴリズム#アルゴリズム#
ある問題を解決するために制定された一連のプログラムまたは方法は、計算を式化した形式で表現または実行する段階的なプログラムである.
試験の前にコーヒーを何杯飲んだら、翌日の試験は何点取れますか.
Score = 10*Coffee+40
今日の温度と湿度のデータは明日のスモッグ濃度を予測できますか?
-->予測が困難
-->機械学習の出現
2.回帰と分類
機械学習で問題を解く場合,問題を解く方法は回帰と分類に分けられる.
回帰
人の顔写真を見て何歳の問題を当てる.
このとき入力値は「顔写真」、出力値は「予測年齢」となります.
上記のように連続した出力値で問題を予測する方法を回帰と呼ぶ.
ぶんかつ
大学受験の前日に勉強した時間を利用して、その科目が直せるかどうかを予測する問題を解決します.
この場合、入力値は「学習時間」、出力値は「完了するかどうか」となります.
このタスクを完了するかどうかは、0,1つのバイナリクラスに分けることができます.
この分類方法をバイナリ分類と呼ぶ.
ここで、出力値を[成績(A,B,C,D,F)]ではなく[完了したかどうか]に変更すると、5つのクラスが表示されます.この分類方法を多重分類と呼ぶ.
*回帰と分類を同時に行います!
回帰から解いた年齢問題から年齢を範囲に分けて考える
前述したように、年齢範囲をカテゴリに分類すると、回帰問題は多重分類問題に変換される.
3.指導/非指導/強化学習
学習を指導する.
機械学習で問題を解く場合,問題を解く方法は回帰と分類に分けられる.
回帰
人の顔写真を見て何歳の問題を当てる.
このとき入力値は「顔写真」、出力値は「予測年齢」となります.
上記のように連続した出力値で問題を予測する方法を回帰と呼ぶ.
ぶんかつ
大学受験の前日に勉強した時間を利用して、その科目が直せるかどうかを予測する問題を解決します.
この場合、入力値は「学習時間」、出力値は「完了するかどうか」となります.
このタスクを完了するかどうかは、0,1つのバイナリクラスに分けることができます.
この分類方法をバイナリ分類と呼ぶ.
ここで、出力値を[成績(A,B,C,D,F)]ではなく[完了したかどうか]に変更すると、5つのクラスが表示されます.この分類方法を多重分類と呼ぶ.
*回帰と分類を同時に行います!
回帰から解いた年齢問題から年齢を範囲に分けて考える
前述したように、年齢範囲をカテゴリに分類すると、回帰問題は多重分類問題に変換される.
3.指導/非指導/強化学習
学習を指導する.
学生に正解の教え方
機械に入力値と出力値を表示し、学習する
正解がなければ不可能な学習方法
実際の操作では、入力値に対応するデータが含まれているが、出力値に対応するデータがない場合、次の操作が実行されます.
-->これを「ラベルリング」または「コメント」と呼びます.
非指導学習
正解を教えずにクラスタ化する方法
パケットアルゴリズムの性質
ex)音源ファイルを分析し、ジャンルを流行、ロック、クラシック、ダンスの問題に分ける
クラスタ、ビジュアル化、関連ルール学習など
学習を強化する.
指定されたデータなしで実行とエラーを繰り返す方法
Alphago誕生の機械学習方法
分類する必要のないデータや分類する必要のないデータは、自分の行為に対する奨励と学習を得ることができます.
学習の概念を強化する
この場合,行動のための行動ディレクトリ(方向キー,ボタン)などは事前に定義する必要がある.
4.線形回帰
線形回帰と仮定,損失関数[Cost関数]
試験前日に飲んだコーヒーカップの数によって試験点数を予測する問題を解決する
上記のデータから以下のグラフが得られる.
*多重線形回帰
線形回帰では、入力変数が複数ある場合は、多重線形回帰が使用されます.
5.勾配降下法
傾斜降下法とは何ですか。
損失関数には次の形式があると仮定します.
ソース:https://towardsdatascience.com/using-machine-learning-to-predict-fitbit-sleep-scores-496a7d9ec48
グラフに沿って下に下がると、損失関数を最小限に抑えることができます.
このとき,コンピュータはランダムに1つの点から始まり,左右に1点移動し,以前の値よりも多くの値を観察し,グラフィックの最小点に達したときに学習を終了する.
このとき左右に移動する単位を学習率と呼び,上記の方法を傾斜降下法と呼ぶ.
学習率が小さすぎると、出発点から最小点を探すのに多くの時間がかかります-->学習に多くの時間がかかります
学習率が大きすぎると、最小値を超え、振動が最も激しい場合に発散する可能性があります-->Overshooting
実際の損失関数はどうですか。
実際の損失関数は,次のように描写できない,想像できない形式である.
ソース:https://regenerativetoday.com/logistic-regression-with-python-and-scikit-learn/
デルの目標は、世界で最も低いコストを見つけることです.
学習率を誤って設定すると、ローカルコストの最小化に陥り、学習を終了します.
これにより、モデルの精度が低下します.
従って,グローバル最小値を探すために良い仮定と良い損失関数が必要である.
6.データセット分割
学習/検証/テストデータ
ソース:https://3months.tistory.com/118
トレーニングセット=教科書
80%のデータセットを使用してマシン学習モデルを学習
Validation set=模擬試験
機械学習モデルの性能の指標を検査し調整する
モデルに直接データを表示しないため、モデルのパフォーマンスXに影響します.
テストセット=大学入試
実際の環境に正しいラベルがない評価データセット
7.実習
線形回帰コードの実行
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
x_data = [[1,1], [2,2], [3,3]]
y_data = [[10], [20], [30]]
X = tf.compat.v1.placeholder(tf.float32, shape[None,2])
Y = tf.compat.v1.placeholder(tf.float32, shape[None,1])
W = tf.Variable(tf.random.normal(shape=(2,1)), name='W')
b = tf.Variable(tf.random.normal(shape=(1,)), name='b')
hypothesis = tf.matmul(X,W) + b
cost = tf.reduce_mean(tf.square(hypothesis - Y))
optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
with tf.compat.v1.Session() as sess:
sessrun(tf.compat.v1.global_variables_initializer())
for step in range(50):
c, W_, b_, _ = sess.run([cost, W, b, optimizer], feed_dict={X: x_data, Y: y_data})
print('Step: %2d\t loss: %.2f\t' % (step,, c))
print(sess.run(hypothesis, feed_dict={X: [[4, 4]]})
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
x_data = np.array([1], [2], [3])
y_data = np.array([[10], [20], [30]])
model = Sequential([
Dense(1)
])
model.compile(loss='mean_squared_error', optimizer = SGD(lr=0.1)
model.fit(x_data, y_data, epochs=100)
y_pred = model.predict([[4]])
print(y_pred)
Kglobleデータを用いた線形回帰実験
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
df = pd.read_csv('advertising.csv')
df.head(5)
print(df.shape)
sns.pairplot(df, x_vars=['TV', 'Newspaper', 'Radio'], y_vars=['Sales'], height=4)
加工x_data = np.array(df[['TV']], dtype=np.float32)
y_data = np.array(df['Sales'], dtype=np.float32)
print(x_data.shape)
print(y_data.shape)
x_data = x_data.reshape((-1, 1))
y_data = y_data.reshape((-1, 1))
print(x_data.shape)
print(y_data.shape)
x_train, x_val, y_train, y_val = train_test_split(x_data, y_data, test_size=0.2, random_state=2021)
print(x_train.shape, x_val.shape)
print(y_train.shape, y_val.shape)
model = Sequential([
Dense(1)
])
model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.1))
model.fit(
x_train,
y_train,
validation_data=(x_val, y_val), # 검증 데이터를 넣어주면 한 epoch이 끝날때마다 자동으로 검증
epochs=100 # epochs 복수형으로 쓰기!
)
y_pred = model.predict(x_val)
plt.scatter(x_val, y_val)
plt.scatter(x_val, y_pred, color='r')
plt.show()
```python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
df = pd.read_csv('advertising.csv')
x_data = np.array(df[['TV', 'Newspaper', 'Radio']], dtype=np.float32)
y_data = np.array(df['Sales'], dtype=np.float32)
x_data = x_data.reshape((-1, 3))
y_data = y_data.reshape((-1, 1))
print(x_data.shape)
print(y_data.shape)
x_train, x_val, y_train, y_val = train_test_split(x_data, y_data, test_size=0.2, random_state=2021)
print(x_train.shape, x_val.shape)
print(y_train.shape, y_val.shape)
model = Sequential([
Dense(1)
])
model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.1))
model.fit(
x_train,
y_train,
validation_data=(x_val, y_val), # 검증 데이터를 넣어주면 한 epoch이 끝날때마다 자동으로 검증
epochs=100 # epochs 복수형으로 쓰기!
)
Reference
この問題について(スパルタ-機械学習1週間), 我々は、より多くの情報をここで見つけました https://velog.io/@richard7714/스파르타-머신러닝-1주차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol