資源簡介
需要自行下載matrix.h文件,可以直接運(yùn)行,得出插值估計值與實(shí)際值比較的結(jié)果。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“matrix.h“
?
using?namespace?std;
?
const?int?P=100;????????//輸入樣本的數(shù)量
vector?X(P);??//輸入樣本
Matrix?Y(P1);????????//輸入樣本對應(yīng)的期望輸出
const?int?M=10;?????????//隱藏層節(jié)點(diǎn)數(shù)目
vector?center(M);???????//M個Green函數(shù)的數(shù)據(jù)中心
vector?delta(M);????????//M個Green函數(shù)的擴(kuò)展常數(shù)
Matrix?Green(PM);?????????//Green矩陣
Matrix?Weight(M1);???????//權(quán)值矩陣
?
/*Hermit多項(xiàng)式函數(shù)*/
inline?double?Hermit(double?x){
????return?1.1*(1-x+2*x*x)*exp(-1*x*x/2);
}
?
/*產(chǎn)生指定區(qū)間上均勻分布的隨機(jī)數(shù)*/
inline?double?uniform(double?floordouble?ceil){
????return?floor+1.0*rand()/RAND_MAX*(ceil-floor);
}
?
/*產(chǎn)生區(qū)間[floorceil]上服從正態(tài)分布N[musigma]的隨機(jī)數(shù)*/
inline?double?RandomNorm(double?mudouble?sigmadouble?floordouble?ceil){
????double?xproby;
????do{
????????x=uniform(floorceil);
????????prob=1/sqrt(2*M_PI*sigma)*exp(-1*(x-mu)*(x-mu)/(2*sigma*sigma));
????????y=1.0*rand()/RAND_MAX;
????}while(y>prob);
????return?x;
}
?
/*產(chǎn)生輸入樣本*/
void?generateSample(){
????for(int?i=0;i????????double?in=uniform(-44);
????????X[i]=in;
????????Y.put(i0Hermit(in)+RandomNorm(00.1-0.30.3));
????}
}
?
/*尋找樣本離哪個中心最近*/
int?nearest(const?vector&?centerdouble?sample){
????int?rect=-1;
????double?dist=numeric_limits::max();
????for(int?i=0;i ????????if(fabs(sample-center[i]) ????????????dist=fabs(sample-center[i]);
????????????rect=i;
????????}
????}
????return?rect;
}
?
/*計算簇的質(zhì)心*/
double?calCenter(const?vector?&g){
????int?len=g.size();
????double?sum=0.0;
????for(int?i=0;i ????????sum+=g[i];
????return?sum/len;
}
?
/*KMeans聚類法產(chǎn)生數(shù)據(jù)中心*/
void?KMeans(){
????assert(P%M==0);
????vector?>?group(M);??????????//記錄各個聚類中包含哪些樣本
????double?gap=0.001;???????//聚類中心的改變量小于為個值時,迭代終止
????for(int?i=0;i ????????center[i]=X[10*i+3];?????//輸入是均勻分布的,所以我們均勻地選取
????}
????while(1){
????????for(int?i=0;i ?????
評論
共有 條評論