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

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

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

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

Q&A

0回答

399閲覧

パーセプトロンの学習アルゴリズムについて

cinnamoroll

総合スコア14

Python

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

0グッド

0クリップ

投稿2018/06/09 23:35

前提・実現したいこと

パーセプトロンの学習アルゴリズムの作成で,パラメータの更新の方法がわかりません.
パラメータの更新において, 学習率としてeta t = 0.01/t とします.

学習データ,テストデータはそれぞれデータ数10000,1000で以下のような786行からなるCSVファイルで与えられています.

"x" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.125490196078431 0.145098039215686 0.145098039215686 0.145098039215686 0.549019607843137 0.850980392156863 0.850980392156863 0.850980392156863 0.854901960784314 0.443137254901961 0.12156862745098 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.247058823529412 0.905882352941176 0.984313725490196 0.984313725490196 0.992156862745098 0.984313725490196 0.984313725490196 0.984313725490196 0.984313725490196 0.992156862745098 0.984313725490196 0.901960784313726 0.243137254901961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.713725490196078 0.866666666666667 0.984313725490196 0.984313725490196 0.984313725490196 0.992156862745098 0.984313725490196 0.984313725490196 0.984313725490196 0.984313725490196 0.992156862745098 0.984313725490196 0.984313725490196 0.556862745098039 0 0 0 0 0 0 0 0 0 0 0 0 0.431372549019608 0.992156862745098 1 0.992156862745098 0.992156862745098 0.992156862745098 0.788235294117647 0 0 0 0 0 0.286274509803922 0.992156862745098 0.992156862745098 0.992156862745098 0.282352941176471 0 0 0 0 0 0 0 0 0 0 0.0823529411764706 0.745098039215686 0.984313725490196 0.992156862745098 0.984313725490196 0.984313725490196 0.737254901960784 0.117647058823529 0 0 0 0 0 0.286274509803922 0.984313725490196 0.984313725490196 0.984313725490196 0.682352941176471 0 0 0 0 0 0 0 0 0.0431372549019608 0.145098039215686 0.772549019607843 0.984313725490196 0.984313725490196 0.992156862745098 0.984313725490196 0.862745098039216 0.0784313725490196 0 0 0 0 0 0 0.894117647058824 0.984313725490196 0.984313725490196 0.984313725490196 0.984313725490196 0 0 0 0 0 0 0 0 0.588235294117647 0.984313725490196 0.984313725490196 0.984313725490196 0.984313725490196 0.992156862745098 0.984313725490196 0.537254901960784 0 0 0 0 0 0 0 0.992156862745098 0.984313725490196 0.984313725490196 0.984313725490196 0.67843137254902 0 0 0 0 0 0 0 0 0.992156862745098 0.984313725490196 0.984313725490196 0.984313725490196 0.984313725490196 0.992156862745098 0.576470588235294 0.0392156862745098 0 0 0 0 0 0 0 0.992156862745098 0.984313725490196 0.984313725490196 0.984313725490196 0.27843137254902 0 0 0 0 0 0 0 0 0.792156862745098 0.992156862745098 0.992156862745098 0.992156862745098 0.992156862745098 0.917647058823529 0.301960784313725 0 0 0 0 0 0 0 0.713725490196078 1 0.992156862745098 0.992156862745098 0.992156862745098 0.282352941176471 0 0 0 0 0 0 0 0 0.12156862745098 0.419607843137255 0.419607843137255 0.662745098039216 0.984313725490196 0.870588235294118 0.243137254901961 0 0 0 0 0 0.0823529411764706 0.564705882352941 0.866666666666667 0.992156862745098 0.984313725490196 0.901960784313726 0.419607843137255 0.117647058823529 0 0 0 0 0 0 0 0 0 0 0 0.427450980392157 0.984313725490196 0.992156862745098 0.501960784313725 0.12156862745098 0 0 0 0 0.247058823529412 0.984313725490196 0.984313725490196 0.992156862745098 0.984313725490196 0.741176470588235 0 0 0 0 0 0 0 0 0 0 0 0 0 0.243137254901961 0.862745098039216 0.992156862745098 0.984313725490196 0.901960784313726 0.427450980392157 0.12156862745098 0.125490196078431 0.427450980392157 0.905882352941176 0.984313725490196 0.984313725490196 0.992156862745098 0.984313725490196 0.137254901960784 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.992156862745098 0.984313725490196 0.984313725490196 0.984313725490196 0.784313725490196 0.792156862745098 0.984313725490196 0.984313725490196 0.984313725490196 0.984313725490196 0.992156862745098 0.576470588235294 0.0392156862745098 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.411764705882353 0.952941176470588 0.992156862745098 0.992156862745098 1 0.992156862745098 0.992156862745098 0.866666666666667 0.705882352941177 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.443137254901961 0.984313725490196 0.984313725490196 0.992156862745098 0.984313725490196 0.901960784313726 0.23921568627451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078431372549 0.137254901960784 0.137254901960784 0.643137254901961 0.137254901960784 0.117647058823529 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

発生している問題・エラーメッセージ

パラメータ更新が想定通りに行えない.

該当のソースコード

python

1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3 4import numpy as np 5import matplotlib.pyplot as plt 6 7np.random.seed(123) 8 9##### シグモイド関数, 誤差関数 10def sigmoid(x): 11 return 1.0 / (1.0 + np.exp(-x)) 12 13def error_function(x, y): 14 return (-1)*y*logz(sigmoid(x)) - (1-y)*logz(1-sigmoid(x)) 15 16# 0除算とINFを防ぐ 17def logz(x): 18 th = 1e-7 19 x = max( th, x ) 20 x = min( x, 1 - th ) 21 return np.log(x) 22 23 24##### データ数 25n = 10000 26n_test = 1000 27 28d = 28**2 #画素数 29 30##### パラメータ(重み)の初期値 31# 平均0,分散0.3の正規乱数をd+1件出力 32w = np.random.normal(0, 0.3, d+1) 33########## 確率的勾配降下法によるパラメータ推定 34e = [] 35e_test = [] 36error = [] 37error_test = [] 38 39step = 0 40num_epoch = 1 41 42eta = 0.01 43 44for epoch in range(0, num_epoch): 45 index = np.random.permutation(n) # indexはnを並び替えた配列 46 47 step += 1 48 for i in index: 49 # テキストから数値の受け取り. 先頭は文字が入っているので飛ばす. 50 dat = np.genfromtxt("./train/{}.csv".format(i))[1:] 51 xi = np.append(1, dat[1:]) 52 yi = dat[0] 53 54############################# ここから ###################### 55 56 ##### 誤差評価 57 e.append(error_function(np.dot(w, xi), yi)) 58 59 for k in range(len(w)): 60 w[k] = w[k] + eta*(yi - ???)*xi[k]/step 61 62#################### ここまで ################################ 63 64 ##### エポックごとの訓練誤差 65 error.append(sum(e)/n) 66 e = [] 67 68 ##### テスト誤差 69 for j in range(0, n_test): 70 dat = np.genfromtxt("./test/{}.csv".format(j))[1:] 71 72 xi = np.append(1, dat[1:]) 73 yi = dat[0] 74 75 e_test.append(error_function(np.dot(w, xi), yi)) 76 77 error_test.append(sum(e_test)/n_test) 78 e_test = [] 79 80 81########## 誤差関数のプロット 82plt.plot(error, label="training", lw=3) #青線 83plt.plot(error_test, label="test", lw=3) #オレンジ線 84plt.grid() 85plt.legend(fontsize =16) 86plt.savefig("./error.pdf") 87

試したこと

パラメータの更新はw[i] = w[i] + x[i]*(y - y')*eta/step (yi:本来の値,y':予測された値)で行えばよいのではないかと考えています.
しかし,このプログラムでは予測された値を得ることができないように思えます.

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問