利用規約の変更について

こんにちは、今ニューラルネットワークをプログラミングしているのですが、データを正規化しようと思っています

たとえば教師データの入力が年齢と身長、出力が体重のデータがあるとします

年齢  身長  目的変数:体重
24    150 |  65(kg)
24    172 |  73(kg)

という年齢が同じデータがある場合
正規化するにはどうればいいでしょうか?

正規化は
正規化後の値 = (正規化前の値 - 最小値) / 最大値 - 最小値
で出すと書いてあったのですが、年齢は最小値と最大値が同じ 24 しかありませんよね、この場合はどうすればいいのでしょうか?

またついでにこの様な最小値 = 最大値の正規化されたデータを元に戻すにはどうすればいいのでしょうか?(出力層のシグモイド関数の計算結果を元のデータの単位に戻したいんです)

わかりにくかったらすいません、ご存じの方よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

 今晩は。


 私もニューラルネットの研究をしています。

一つ目の回答
 この場合教師データの入力としての価値が年齢の項目にはありません。したがって二つの方法が考えられます。

1.年齢は入力しない。
2.適当な最大値、最小値を自分で決定して正規化する。

2の方法はつまり好きな1~0の値を選ぶことになります。
状況に応じて選択してください。

二つ目の回答
正規化後の値 = (正規化前の値 - 最小値) / 最大値 - 最小値
だから
正規化後の値=A
正規化前の値=B
最大値=Max
最小値=Min
とすると、
A=(B-Min)/(Max-Min)
よって
(Max-Min)A-Min=B
では?
    • good
    • 0
この回答へのお礼

お返事遅れました…
大変分かりやすい説明ありがとうございます!
なるほどそうなんですね、実際にやってみたらできました!!
助かりました、ありがとうございました

お礼日時:2008/08/24 11:53

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q多層パーセプトロンの中間層数について

お世話になっております.
多層パーセプトロンに関してですが,中間層数は1層と2層以上で理論的に差異はあるのでしょうか?
2層以上にするなら,1層のままで単純に中間ユニット数を多くすればよいのではないでしょうか?
今,流行りのディープラーニングなるものに少し懐疑的で疑問があります.
ニューラルネットワークにおいて,中間層は層数ではなく,ユニット数に意味があると考えております.

Aベストアンサー

ニューラルネットワークは3層(中間層1)で任意の連続関数を近似できると聞いたことがありますので、中間層のユニット数を無制限にできるなら表現力という意味での差異はないかもしれません。
ただ、ユニット数無制限という仮定は現実的には無意味です。例えば、中間層1層ユニット数10000と、中間層2層ユニット数200(100+100)で表現力が同等だとしたら2層にする価値はありますよね。同じロジックで3層4層と増やすと1層では物理的にムリな表現力を多層なら得られるかもしれません。
また多層にすることで学習結果の解釈が可能になるという側面もあります。Google猫が有名ですが、後の層ほどより抽象的な概念に相当するノードができるということですから、1層だと複数ノードの重み分布に隠れてしまう抽象概念が後層の1ノードに集約されるわけです。これにより知能獲得のプロセスを解き明かすことができるかもしれません。

Q階層ニューラルネットワークにおける入出力層の数について

ある問題を解くのに,入力層5個,出力層10個の階層ニューラルネットワークを用いています.このように入力層よりも出力層の方が多くても正しく計算されるのでしょうか?また,中間層の決定はどのように行うのが一番いいのでしょうか?よろしくお願いいたします.

Aベストアンサー

多分大丈夫でしょう.
3層のNNですか?
中間層のニューロン数は、入力層の倍の数以下を計算してみて、最も良いものを選択するという方法が一般的だと思います.
また、各重み係数をみてあまり効果の無いニューロンを削れば良いでしょう.

Q線形・非線形って何ですか?

既に同じようなテーマで質問が出ておりますが、
再度お聞きしたく質問します。

※既に出ている質問
『質問:線形、非線型ってどういう意味ですか?』
http://oshiete1.goo.ne.jp/kotaeru.php3?q=285400
結局これを読んでもいまいちピンと来なかった...(--;


1.線形と非線形について教えてください。
2.何の為にそのような考え方(分け方)をするのか教えてください。


勝手なお願いですが、以下の点に留意いただけると大変うれしいです。
何せ数学はそんなに得意ではない人間+歳なので...(~~;

・わかりやすく教えてください。(小学生に説明するつもりぐらいだとありがたいです)
・例をあげてください。(こちらも小学生でもわかるような例をいただけると助かります)
・数式はなるべく少なくしてください。

『そんな条件じゃ説明できないよー』という方もいると思いますが、どうぞよろしくお願いいたしますm(__)m

Aベストアンサー

昨日「線形の方がなんとなくてわかりやすくないですか」と書いたんですが、やっぱり理系の人間らしく、もうちょっときちんと説明してみます。昨日は数式をなるべく出さないように説明しようとがんばったんですが、今日は少しだけ出しますが、勘弁してください。m(__)m(あと、長文も勘弁してください)


数学的にはちょっとここまで言えるかわかりませんが、自然界の法則としては、「線形」が重要な意味を持つのは、xの値が変化するにつれて変化するyがあったときに、

(yの増加量)/(xの増加量)=A(一定)

という規則が成り立つからです。

xやyの例としては昨日の例で言う例1だとxがガムの個数、yが全体の金額、例2だとxが時間、yが走った距離です。

この規則が何で役に立つかというと、式をちょっと変形すると、

(yの増加量)=A×(xの増加量)・・(1)

ということがわかります。つまり、Aの値さえわかれば、xが増えたときのyの値が容易に推測できるようになるわけです。


ここで「Aの値さえわかれば」と書いていますが、この意味を今から説明します。

自然界の法則を調べるためには何らかの実験を行います。例えば、りんごが木から落ちる運動の測定を行います。
ここから質問者様がイメージできるかわかりませんが、りんごは時間が経つにつれて(下に落ちるにつれて)落下するスピードが速くなるんです。今、実験として、1秒ごとにりんごのスピードを測定したとします。そしてその結果をグラフにプロットしていくと、直線になることがわかります。(ここがわかりにくいかもしれませんが、実際に実験を行うとそのようになるのです)

数学の問題のように初めから「時速100kmで走る」とか「1個100円のガム」とかいうことが与えられていれば直線になることはすぐにわかります。
しかし、自然界の法則はそうもうまくいきません。つまり、実験を行ってその結果をプロットした結果が直線状になっていたときに初めて「何らかの法則があるのではないか」ということがわかり、上で書いた「Aの値さえわかれば」の「A」の値がプロットが直線状になった結果、初めてわかるのです。

そして、プロットが直線状になっているということは、永遠にそうなることが予想されます。つまり、今現在はりんごが木から落ちたときしか実験できませんが、その結果を用いて、もしりんごが雲の上から落としたときに地面ではどのくらいのスピードになるかが推測できるようになるわけです。ここで、このことがなぜ推測できるようになるかというと、(1)で書いた関係式があるからです。このように「なんらかの法則があることが推測でき、それを用いて別の事象が予言できるようになる」ことが「線形」が重要だと考えられる理由です。

しかし、実際に飛行機に乗って雲の上からりんごを落としたらここで推測した値にはならないのです。スカイダイビングを想像するとわかると思いますが、最初はどんどんスピードが上がっていきますが、ある程度でスピードは変わらなくなります。(ずっとスピードが増え続けたら、たぶんあんなに空中で動く余裕はないでしょうか??)つまり、「線形から外れる」のです。

では、なぜスピードが変わらなくなるかというと、お分かりになると思いますが、空気抵抗があるからなんですね。(これが昨日「世の中そううまくはいかない」と書いた理由です)つまり、初めは「線形」かと思われたりんごを落とすという実験は実際には「非線形」なんです。非線形のときは(1)の関係式が成り立たないので、線形のときほど容易には現象の予測ができないことがわかると思います。


では、非線形だと、全てのことにおいて現象の予測が難しいのでしょうか?実はそうでもありません。例えば、logは非線形だということをNo.5さんが書かれていますが、「片対数グラフ」というちょっと特殊な形のグラフを用いるとlogや指数関数のグラフも直線になるんです。つまり、普通のグラフでプロットしたときに「非線形」になるため一見何の法則もないように見えがちな実験結果が「片対数グラフ」を用いると、プロット結果が「線形」になってlogや指数関数の性質を持つことが容易にわかり、それを用いて現象の予測を行うことが(もちろん単なる線形よりは難しいですが)できるようになるわけです。


これが私の「線形」「非線形」の理解です。つまり、

1) 線形の結果の場合は同様の他の事象の推測が容易
2) 非線形の場合は同様の他の事象の推測が困難
3) しかし、一見非線形に見えるものも特殊な見方をすると線形になることがあり、その場合は事象の推測が容易である

このことからいろいろな実験結果は「なるべく線形にならないか」ということを目標に頑張ります。しかし、実際には先ほどの空気抵抗の例のように、どうしても線形にはならない事象の方が世の中多いんです。(つまり、非線形のものが多いんです)

わかりやすいかどうかよくわかりませんが、これが「線形」「非線形」を分ける理由だと思っています。

やっぱり、「線形の方がなんとなくわかりやすい」くらいの理解の方がよかったですかね(^^;;

昨日「線形の方がなんとなくてわかりやすくないですか」と書いたんですが、やっぱり理系の人間らしく、もうちょっときちんと説明してみます。昨日は数式をなるべく出さないように説明しようとがんばったんですが、今日は少しだけ出しますが、勘弁してください。m(__)m(あと、長文も勘弁してください)


数学的にはちょっとここまで言えるかわかりませんが、自然界の法則としては、「線形」が重要な意味を持つのは、xの値が変化するにつれて変化するyがあったときに、

(yの増加量)/(xの増加量)=...続きを読む

Q相関係数についてくるP値とは何ですか?

相関係数についてくるP値の意味がわかりません。

r=0.90 (P<0.001)

P=0.05で相関がない

という表現は何を意味しているのでしょうか?
またMS Excelを使ってのP値の計算方法を教えてください。

よろしくお願い致します。

Aベストアンサー

pは確率(probability)のpです。全く相関のない数字を組み合わせたときにそのr値が出る確率をあらわしています。

統計・確率には100%言い切れることはまずありません。というか100%言い切れるのなら統計・確率を使う必要は有りません。
例えばサイコロを5回振って全て同じ目が出る確率は0.08%です。そんな時、そのサイコロを不良品(イカサマ?)と結論つけるとわずかに間違っている可能性が残っています。ただ、それが5%以下ならp=0.05でそのサイコロは正常ではないと結論付けます。
それが危険率です。(この場合はp=0.1%でもいいと思いますが)
相関係数においても相関の有無を結論つけるにはそのrが偶然出る確率を出すか、5%の確率ならrがどれぐらいの値が出るかを知っておく必要が有ります。

>r=0.90 (P<0.001)

相関係数は0.90と計算された。相関がないのに偶然r=0.90 となる確率は0.001以下だと言ってます。

>P=0.05で相関がない

相関がないと結論。(間違っている確率は5%以下)だと言ってます。

エクセルでの計算ですが、まず関数CORRELを使ってr値を出します。xデータがA1からA10に、yデータがB1からB10に入っているとして

r=CORREL(A1:A10,B1:B10)

次にそのr値をt値に変換します。

t=r*(n-2)^0.5/(1-r^2)^0.5

ここでnは組みデータの数です。((x1,y1),(x2,y2),・・・(xn,yn))
最後に関数TDISTで確率に変換します。両側です。

p=TDIST(t値,n-2,2)

もっと簡単な方法があるかも知れませんが、私ならこう計算します。(アドインの分析ツールを使う以外は)

pは確率(probability)のpです。全く相関のない数字を組み合わせたときにそのr値が出る確率をあらわしています。

統計・確率には100%言い切れることはまずありません。というか100%言い切れるのなら統計・確率を使う必要は有りません。
例えばサイコロを5回振って全て同じ目が出る確率は0.08%です。そんな時、そのサイコロを不良品(イカサマ?)と結論つけるとわずかに間違っている可能性が残っています。ただ、それが5%以下ならp=0.05でそのサイコロは正常ではないと結論付けます。
それが危険率です。(この場...続きを読む

Q3層の階層型ニューラルネット(逆誤差伝播法)

入力層、中間層、出力層の計3層です。
中間層の出力関数にはシグモイド関数、出力層の出力関数には線形関数を用います。閾値はありません。
わからないのは逆方向処理のところです。慣性項を付加したプログラムを組もうと思っているのですが、結合荷重の修正量を求めるところがわかりません。
素人なのでわかりにくい書き方かもしれませんがよろしくお願いします。

Aベストアンサー

ぱっと見たんでアルゴニズムを忠実に再現できているかは確認していませんが
d_wkj[k][j]= ETA*d_k[k]*y[j];

d_wkj[k][j]= ETA*d_k[k]*y[j] + alpha*d_wkj[k][j];
alpha(0<=alpha<1)
にすれば良いはずです。
各バイアスや中間層の結合加重にしても同じです。

Qエクセル STDEVとSTDEVPの違い

エクセルの統計関数で標準偏差を求める時、STDEVとSTDEVPがあります。両者の違いが良くわかりません。
宜しかったら、恐縮ですが、以下の具体例で、『噛み砕いて』教えて下さい。
(例)
セルA1~A13に1~13の数字を入力、平均値=7、STDEVでは3.89444、STDEVPでは3.741657となります。
また、平均値7と各数字の差を取り、それを2乗し、総和を取る(182)、これをデータの個数13で割る(14)、この平方根を取ると3.741657となります。
では、STDEVとSTDEVPの違いは何なのでしょうか?統計のことは疎く、お手数ですが、サルにもわかるようご教授頂きたく、お願い致します。

Aベストアンサー

データが母集団そのものからとったか、標本データかで違います。また母集団そのものだったとしても(例えばクラス全員というような)、その背景にさらならる母集団(例えば学年全体)を想定して比較するような時もありますので、その場合は標本となります。
で標本データの時はSTDEVを使って、母集団の時はSTDEVPをつかうことになります。
公式の違いは分母がn-1(STDEV)かn(STDEVP)かの違いしかありません。まぁ感覚的に理解するなら、分母がn-1になるということはそれだけ結果が大きくなるわけで、つまりそれだけのりしろを多くもって推測に当たるというようなことになります。
AとBの違いがあるかないかという推測をする時、通常は標本同士の検証になるわけですので、偏差を余裕をもってわざとちょっと大きめに見るということで、それだけ確証の度合いを上げるというわけです。

Qピークの検出方法

ある離散時系列データf(x)があったとき、単純に考えれば
f'(x)=f(x+1)-f(x)<0.0001,f''(x)=f'(x+1)-f'(x)<0
となるxを求めればピークのxが検出できると思いますが、
f(x)が滑らかでない場合はどんな方法でピークが検出できますでしょうか?

Aベストアンサー

>f'(x)=f(x+1)-f(x)<0.0001, f''(x)=f'(x+1)-f'(x)<0 ....

基本はこれでOKなので、「f(x)が滑らかでない場合」に引っかかりそうなケースを考えてみましょう。

[誤検出しそうな例]
(1) サンプリングしたデータでは、ピークでの増分が 0.0001 未満とは限らない。(つまり、とんがり気味のピークは検出できない)
(2) 真のピークではなく、裾野の細かいうねりまで検出するおそれがある。

[対策例]
(1) 単純に、f'(x)が正から負へ極性反転したらピークとみなす。
(2) #1 さんの「平滑化」処理を適用する。
(2)' あるいは、f'(x)が正から負へ極性反転したピークの高さに閾値を設定しておく。(つまり、細かなピークは無視する)

ピーク検出には、適用分野に応じたノウハウが多数あるようです。

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Q回帰分析におけるデータの正規化の意味

重回帰分析をプログラム作成することを考えています。
しかし、データの正規化について疑問が2つあります。

まず一つは、例えば、画像の解析をする場合にデータの正規化をすることは、
ノイズを除去したり、画像の向きを正しくすることを意味しますよね。
しかし、回帰分析においてデータの正規化をすることは何を意味しているのでしょうか?
画像のように見てイメージがわけばよいのですが、数値データなのでどういう意図があるのかよく分かりません。


2つ目の疑問です。
また、データを正規化して重回帰分析をしたとします。
↓の重回帰分析を例に挙げます。
http://homepage2.nifty.com/crop_shimane-u/multipleregression_excel.htm
この例では、入力として年平均気温、降水量、日照時間とし、出力を単収としています。
このときデータを正規化せずに解析し、次のような予測式を推定しています。
 水稲単収=713.932-17.336×年平均気温+0.010666×降水量+0.017851×日照時間 ・・・ @
この場合に、正規化していないので新しいデータとして、例えば、
 年平均気温=14.8、降水量=2431、日照時間=1721 ・・・ (*)
から単収を推定したいとき、上記@の回帰式に代入することで単収を計算して推定できます。(1)

しかし、データを正規化(平均が0、分散が1になるように)した場合、入力と出力のデータが0以上1以下の値しかとらなくなるので、
重回帰によって上記@のように予測式が得られてもその予測式の出力は0以上1以下の値しかとらないことになり、
新しいデータ(*)をそのまま予測式に代入しても正しい単収を推定できないのではないかと考えています。
この場合のように、データを正規化して得られた予測式で(1)のように正しく単収を推定するにはどうしたらよいのでしょうか?

長くなりましたが、回答よろしくお願いします。

重回帰分析をプログラム作成することを考えています。
しかし、データの正規化について疑問が2つあります。

まず一つは、例えば、画像の解析をする場合にデータの正規化をすることは、
ノイズを除去したり、画像の向きを正しくすることを意味しますよね。
しかし、回帰分析においてデータの正規化をすることは何を意味しているのでしょうか?
画像のように見てイメージがわけばよいのですが、数値データなのでどういう意図があるのかよく分かりません。


2つ目の疑問です。
また、データを正規化し...続きを読む

Aベストアンサー

問1
正規化をすると、単位に引きずられず偏回帰係数によってその因子の影響を比較評価できるようになります。
たとえば、mmとcmと単位を変えたとき、mmで式を作ると「降水量」が大きな偏回帰係数を持ち、「降水量」の影響が大きく見えます。正規化してみれば、各因子の係数が、「寄与率」のように比較できます。
正規化して重回帰分析を行ったときの係数を「標準偏回帰係数」といいます。多くの解析ソフトは、両方を表示します。

問2
ご質問者の誤解です。
平均を0、分散を1までは正しいです。
データはおおよそー3から3くらい(ー3σから+3σ)になっているはずです。なぜ、正値しか考えないのですか? 負値もとります。
正規化(基準化,標準化ともいいます)した場合の予測値は、しない場合と同じ値を与えないと間違いです。

問3
もし、手持ちのルーチンが正値しか扱えないのなら、学力試験の偏差値のように(50,10)(偏差値といいます)にしても良いかもしれません。

QPythonの指数表記について

Pythonであるサイトにxhrした時に6.2E-7というように指数で値が取れます。
これを0.00000062として扱いたいのですが、どのようにすればよいでしょうか。

Aベストアンサー

float関数では、指数表現の文字列でも正しく数値に変換してくれます
a='6.2E-7'
b=float(a) #-> b=6.2e-07

既に数値になっているのでしたら、 6.2E-7は何もしなくても 0.00000062 として扱われます。
'0.00000062' という文字列にしたいのなら、 書式 % 値 で変換をしてください。
c= "%.10f" % b # c='0.0000006200'


人気Q&Aランキング

おすすめ情報