Weather casting with Machine Learning (SVM and SRNN).
Dependencies: EthernetInterface GraphicHandler NTPClient SRNN SVM SensorModule mbed-rtos mbed
ml_util/ml_util.hpp
- Committer:
- yukari_hinata
- Date:
- 2015-02-18
- Revision:
- 2:20ecfe6edd71
- Child:
- 5:b61f3f5b0fc8
File content as of revision 2:20ecfe6edd71:
#ifndef ML_UTIL_H_INCLUDED #define ML_UTIL_H_INCLUDED #include "mbed.h" /* float.h がないので, FLT_MAXをここで */ #ifndef FLT_MAX #define FLT_MAX (0x1.fffffeP127F) // float max #endif // 特に行列演算用のマクロ集 // 行列アクセス用マクロ. n_lenは行列の幅(length, col,列の数) #define MATRIX_AT(ary,n_len,i,j) (ary[(((i) * (n_len)) + (j))]) // 2乗(ユーグリッド)ノルムを返す inline float two_norm(float *vec, int dim) { register float ret = 0; for (int i=0; i < dim; i++) { ret += powf(vec[i],2); } return sqrtf(ret); } // 2ベクトル間の距離をユーグリッドノルムで測る. inline float vec_dist(float *x, float *y, int dim) { register float ret = 0; for (int i=0; i < dim; i++) { ret += powf(x[i] - y[i],2); } return sqrtf(ret); } // 一様乱数の生成 : [-w,w]で生成. inline float uniform_rand(float w) { return (float(rand() - RAND_MAX/2) / float(RAND_MAX)) * 2 * w; } // float配列の最大値を返す inline float maxf(float* ary, int dim) { register float max = 0; for (int i=0; i < dim; i++) { if (ary[i] >= max) { max = ary[i]; } } return max; } // float配列の最小値を返す inline float minf(float* ary, int dim) { register float min = FLT_MAX; for (int i=0; i < dim; i++) { if (ary[i] <= min) { min = ary[i]; } } return min; } // サイズm*nの行列とサイズn*1のベクトルの掛け算を計算し,結果をresultにセットする. extern void multiply_mat_vec(float* mat, // m * n 行列 float* vec, // n * 1 ベクトル float* result, // m * 1 計算結果ベクトル int m, // m int n); // n // シグモイド(ロジスティック)関数. inline float sigmoid_func(float x){ return (1 / (1 + expf(-x))); } // 信号の正規化([0,1]の範囲に収めること:超重要) inline float normalize_signal(float in, float max, float min){ return float((in - min) / (max - min)); } // 信号の元の領域への拡大([0,1]から元の信号値にスケール) inline float expand_signal(float in, float max, float min){ return float(min + (max - min) * in); } #endif /* ML_UTIL_H_INCLUDED */