基於雙月資料集利用感知層進行分類

2021-08-28 17:14:00 字數 3391 閱讀 3919

1、生成資料集

class

moon_data_class

(object):

def__init__

(self,n,d,r,w)

: self.n=n

self.w=w

self.d=d

self.r=r

defsgn(self,x):if

(x>0)

:return1;

else

:return-1

;def

dbmoon

(self)

: n1 =

10*self.n

r = self.r

w2 = self.w/

2 d = self.d

done =

true

data = np.empty(0)

while done:

#generate rectangular data

tmp_x =2*

(r+w2)

*(np.random.random(

[n1,1]

)-0.5)

tmp_y =

(r+w2)

*np.random.random(

[n1,1]

) tmp = np.concatenate(

(tmp_x, tmp_y)

, axis=1)

tmp_ds = np.sqrt(tmp_x*tmp_x + tmp_y*tmp_y)

#generate double moon data ---upper

idx = np.logical_and(tmp_ds >

(r-w2)

, tmp_ds <

(r+w2)

) idx =

(idx.nonzero())

[0]if data.shape[0]

==0: data = tmp.take(idx, axis=0)

else

: data = np.concatenate(

(data, tmp.take(idx, axis=0)

), axis=0)

if data.shape[0]

>= n:

done =

false

#print (data)

db_moon = data[

0:n,:]

#print (db_moon)

#generate double moon data ----down

data_t = np.empty(

[n,2])

data_t[:,

0]= data[

0:n,0]

+ r data_t[:,

1]=-data[

0:n,1]

- d db_moon = np.concatenate(

(db_moon, data_t)

, axis=0)

return db_moon

n =1000

d =3

r =10

width =

2data_source = moon_data_class(n, d, r, width)

data = data_source.dbmoon(

)

2、整理資料集,將輸入資料定義為感知器的標準輸入,將資料集分為1和-1兩類,存入列表d中。

x0 =[1

for x in

range(1

,2001)]

#固定為+1

x = np.array(

[np.reshape(x0,

len(x0)

), np.reshape(data[0:

2*n,0]

,len

(data)

), np.reshape(data[0:

2*n,1]

,len

(data))]

).transpose(

)w = np.array([1

,0,0

])d_pre =[1

for y in

range(1

,1001)]

d_pos =[-

1for y in

range(1

,1001)]

d=d_pre+d_pos

3、迭代訓練獲取權值向量

for ii in

range(50

):i=

0sum=0

for x_n in x:

y_n = data_source.sgn(np.dot(w.t, x_n)

) w = w + a*

(d[i]

- y_n)

*x_n

i = i+

1

4、計算決策邊界,繪製訓練結果。因為w[0

]+w[

1]∗x

+w[2

]∗y=

0w[0] + w[1]*x+w[2]*y=0

w[0]+w

[1]∗

x+w[

2]∗y

=0於是有y=−

w[1]

/w[2

]∗x−

w[0]

/w[2

]y=-w[1]/w[2] *x-w[0]/w[2]

y=−w[1

]/w[

2]∗x

−w[0

]/w[

2]

x = np.array(

range(-

15,25)

)y =

-x*w[1]

/w[2

]-w[0]

/w[2

]plt.subplot(

211)

plt.plot(x, y,

'g--'

)plt.plot(data[

0:n,0]

, data[

0:n,1]

,'r*'

, data[n:

2*n,0]

, data[n:

2*n,1]

,'b*'

)plt.show(

)

5、執行結果

Keras多層感知機識別MNIST資料集

windows 10,python 3.5 import numpy as np import pandas as pd from keras.utils import np utils from keras.datasets import mnist import matplotlib.pyplo...

感知機algorithm實現鳶尾花資料集分類

感知機是乙個非常基礎的二分類的演算法,是演算法小白入門機器學習的必學內容,是神經網路和svm的基礎。好了,不蝦扯蛋了,上 感知機實現鳶尾花資料集的分類 import pandas as pd import numpy as np from sklearn.datasets import load i...

RF實踐 基於sonar聲吶資料集

用excel開啟資料集,有208行60列特徵 值域為0到1 標籤為r m。表示208個觀察物件,60個不同角度返回的力度值,二分類結果是岩石 金屬。注 from csv import reader 連線中少了個r 決策樹方差高 引入bagging降低方差 bagging下的樹相似,相似 引入列取樣 ...