MATLAB用rbf拟合sinx,为什么径向基(RBF)网络拟合度很差呢?

本帖最后由 mingyong 于 2014-11-29 16:58 编辑

急需帮助,为什么准确度不到80%

数据如下(data.dat):

1 0 2 14 33 50

2 1 24 56 31 67

3 1 23 51 31 69

4 0 2 10 36 46

5 1 20 52 30 65

6 1 19 51 27 58

7 2 13 45 28 57

8 2 16 47 33 63

9 1 17 45 25 49

10 2 14 47 32 70

11 0 2 16 31 48

12 1 19 50 25 63

13 0 1 14 36 49

14 0 2 13 32 44

15 2 12 40 26 58

16 1 18 49 27 63

17 2 10 33 23 50

18 0 2 16 38 51

19 0 2 16 30 50

20 1 21 56 28 64

21 0 4 19 38 51

22 0 2 14 30 49

23 2 10 41 27 58

24 2 15 45 29 60

25 0 2 14 36 50

26 1 19 51 27 58

27 0 4 15 34 54

28 1 18 55 31 64

29 2 10 33 24 49

30 0 2 14 42 55

31 1 15 50 22 60

32 2 14 39 27 52

33 0 2 14 29 44

34 2 12 39 27 58

35 1 23 57 32 69

36 2 15 42 30 59

37 1 20 49 28 56

38 1 18 58 25 67

39 2 13 44 23 63

40 2 15 49 25 63

41 2 11 30 25 51

42 1 21 54 31 69

43 1 25 61 36 72

44 2 13 36 29 56

45 1 21 55 30 68

46 0 1 14 30 48

47 0 3 17 38 57

48 2 14 44 30 66

49 0 4 15 37 51

50 2 17 50 30 67

51 1 22 56 28 64

52 1 15 51 28 63

53 2 15 45 22 62

54 2 14 46 30 61

55 2 11 39 25 56

56 1 23 59 32 68

57 1 23 54 34 62

58 1 25 57 33 67

59 0 2 13 35 55

60 2 15 45 32 64

61 1 18 51 30 59

62 1 23 53 32 64

63 2 15 45 30 54

64 1 21 57 33 67

65 0 2 13 30 44

66 0 2 16 32 47

67 1 18 60 32 72

68 1 18 49 30 61

69 0 2 12 32 50

70 0 1 11 30 43

71 2 14 44 31 67

72 0 2 14 35 51

73 0 4 16 34 50

74 2 10 35 26 57

75 1 23 61 30 77

76 2 13 42 26 57

77 0 1 15 41 52

78 1 18 48 30 60

79 2 13 42 27 56

80 0 2 15 31 49

81 0 4 17 39 54

82 2 16 45 34 60

83 2 10 35 20 50

84 0 2 13 32 47

85 2 13 54 29 62

86 0 2 15 34 51

87 2 10 50 22 60

88 0 1 15 31 49

89 0 2 15 37 54

90 2 12 47 28 61

91 2 13 41 28 57

92 0 4 13 39 54

93 1 20 51 32 65

94 2 15 49 31 69

95 2 13 40 25 55

96 0 3 13 23 45

97 0 3 15 38 51

98 2 14 48 28 68

99 0 2 15 35 52

100 1 25 60 33 63

101 2 15 46 28 65

102 0 3 14 34 46

103 2 18 48 32 59

104 2 16 51 27 60

105 1 18 55 30 65

106 0 5 17 33 51

107 1 22 67 38 77

108 1 21 66 30 76

109 1 13 52 30 67

110 2 13 40 28 61

111 2 11 38 24 55

112 0 2 14 34 52

113 1 20 64 38 79

114 0 6 16 35 50

115 1 20 67 28 77

116 2 12 44 26 55

117 0 3 14 30 48

118 0 2 19 34 48

119 1 14 56 26 61

120 0 2 12 40 58

121 1 18 48 28 62

122 2 15 45 30 56

123 0 2 14 32 46

124 0 4 15 44 57

125 1 24 56 34 63

126 1 16 58 30 72

127 1 21 59 30 71

128 1 18 56 29 63

129 2 12 42 30 57

130 1 23 69 26 77

131 2 13 56 29 66

132 0 2 15 34 52

133 2 10 37 24 55

134 0 2 15 31 46

135 1 19 61 28 74

136 0 3 13 35 50

137 1 18 63 29 73

138 2 15 47 31 67

139 2 13 41 30 56

140 2 13 43 29 64

141 1 22 58 30 65

142 0 3 14 35 51

143 2 14 47 29 61

144 1 19 53 27 64

145 0 2 16 34 48

146 1 20 50 25 57

147 2 13 40 23 55

148 0 2 17 34 54

149 1 24 51 28 58

150 0 2 15 37 53

用newrb训练代码如下:

close all; clc; clf; clear all;

Ntrain=115;

%% ------------------------------------------------------------------------

%% ------------------------load the training ------------------------------

load data.dat

%% --------------------normalize the input data to rang [-1 +1]------------

datanew=data(:,3:6);

maxv=max(max(datanew));

minv=min(min(datanew));

datanorm=2*((datanew-minv)/(maxv-minv)-0.5);

outputData=zeros(150,3);

for i=1:150

if(data(i,2)==0)

outputData(i,: )=[1 0 0];

elseif(data(i,2)==1)

outputData(i,: )=[0 1 0];

else

outputData(i,: )=[0 0 1];

end

end

datanew=[datanorm outputData];

trainNumSamples=115;

idx=randperm(150);

idx=idx(1:trainNumSamples);

train=datanew(idx,: );

test=datanew;

test(idx,: )=[];

train_x=train(:,1:4)';

train_y=train(:,5:7)';

test_x=test(:,1:4)';

Odesired=test(:,5:7)';

output=zeros(35,1);

for i=1:35

if Odesired(1,i)==1

output(i)=0;

elseif Odesired(2,i)==1

output(i)=1;

elseif Odesired(3,i)==1

output(i)=2;

else

output(i)=3;

end

end

%% ------------------------------------------------------------------------

%% create the newrb

er=1e-8;

spread=0.1;

N=Ntrain;

net=newrb(train_x,train_y,er,spread,N);

%% ------------------------------------------------------------------------

%% --------------------------------start testing---------------------------

otest=zeros(35,1);

test_y=net(test_x);

Accuracy=0;

for i=1:35

if (test_y(1,i)>0.9)

otest(i)=0;

elseif(test_y(2,i)>0.9)

otest(i)=1;

elseif(test_y(3,i)>0.9)

otest(i)=2;

else

otest(i)=3;

end

if(otest(i)==output(i))

Accuracy=Accuracy+1;

end

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值