2019年6月11日火曜日

開発環境

はじめての機械学習 (小高知宏(著)、オーム社)の第2章(パラメーター調整による学習)、2.1(パラメータ調整と学習)、2.1.1(学習データセットの機械学習とパラメタ調整)、2.1.2(パラメタ調整の実行例)をC言語ではなくPythonで取り組んでみる。

コード

Python 3

#!/usr/bin/env python3
import sys
import matplotlib.pyplot as plt

sigma_xi = 0
sigma_yi = 0
sigma_xiyi = 0
sigma_xi2 = 0
n = 0
xis = []
yis = []
for line in sys.stdin:
    line = line.strip()
    try:
        xi, yi = [float(x) for x in line.split()]
    except ValueError as err:
        print(f"ValueError: {err} '{line}'", file=sys.stderr)
    else:
        xis.append(xi)
        yis.append(yi)
        sigma_xi += xi
        sigma_yi += yi
        sigma_xiyi += xi * yi
        sigma_xi2 += xi ** 2
        n += 1

if n >= 2:
    a0 = (sigma_xi2 * sigma_yi - sigma_xiyi * sigma_xi) / \
        (n * sigma_xi2 - sigma_xi ** 2)
    a1 = (n * sigma_xiyi - sigma_xi * sigma_yi) / \
        (n * sigma_xi2 - sigma_xi ** 2)
    print(f'a0 = {a0}, a1 = {a1}')
    plt.scatter(xis, yis, color='green')
    xs = range(int(min(xis)), int(max(xis)) + 2)
    plt.plot(xs, [a0 + a1 * x for x in xs], color='blue')
    plt.legend([f'{a0} + {a1}x', 'input', ])
    # plt.show()
    plt.savefig('sample1.png')
else:
    print('データ不足', file=sys.stderr)

入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))

C:\Users\...>type input1.txt
1 2.1
3 3.7
2.5 3.4
3.9 3.1

C:\Users\...>py sample1.py < input1.txt
a0 = 2.0102941176470583, a1 = 0.4095022624434396

C:\Users\...>py sample1.py
1 2.1
3
ValueError: not enough values to unpack (expected 2, got 1) '3'
4 xyz
ValueError: could not convert string to float: 'xyz' '4 xyz'
データ不足

C:\Users\...>

0 コメント:

コメントを投稿