日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

基于双月数据集单层感知机_python

發(fā)布時間:2024/3/13 python 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于双月数据集单层感知机_python 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  • 前言
  • 一、單層感知機
  • 二、雙月數(shù)據(jù)集
  • 三、程序
    • 1.引入庫
    • 2.主函數(shù)
  • 總結(jié)
  • 完整程序


前言

本文主要針對雙月數(shù)據(jù)集實現(xiàn)二分類問題。


一、單層感知機

單層感知機目標是將被感知數(shù)據(jù)集劃分為兩類的分離超平面,并計算出該超平面。單層感知機是二分類的線性分類模型,輸入是被感知數(shù)據(jù)集的特征向量,輸出時數(shù)據(jù)集的類別{+1,-1}。感知器的模型可以簡單表示為:

該函數(shù)稱為單層感知機,其中w是網(wǎng)絡的N維權(quán)重向量,b是網(wǎng)絡的N維偏置向量, w.x是w和x的內(nèi)積,w和b的N維向量取值要求在實數(shù)域。

本文是將感知機模型簡化,將權(quán)值b合并到w里進行更新,簡化了計算。

sign函數(shù)是感知機的早期激活函數(shù),后面又演化出一系列的激活函數(shù)。激活函數(shù)一般采用非線性激活函數(shù),以增強網(wǎng)絡的表達能力。常見的激活函數(shù)有:sign, sigmoid,tanh,ReLU等。

二、雙月數(shù)據(jù)集

根據(jù)圓的參數(shù)方程,設置圓的角度與雙月寬度兩個隨機參數(shù)生成雙月數(shù)據(jù)點集。
初始值為:
N = 1000 # 單個月亮數(shù)據(jù)集數(shù)據(jù)量
w = 2
r = 8
d = 1
iter = 50 # 迭代次數(shù)
learning_rate = 0.001 # 學習率
wn = np.array([1,0,0])

def moon(N,w,r,d):'''# :param w: 半月寬度# :param r: x軸偏移量# :param d: y軸偏移量# :param N: 半月散點數(shù)量:return: data (2*N*3) 月亮數(shù)據(jù)集data_dn (2*N*1) 標簽'''data = np.ones((2*N,4))# 半月1的初始化r1 = 10 # 半月1的半徑,圓心w1 = np.random.uniform(-w / 2, w / 2, size=N) # 半月1的寬度范圍theta1 = np.random.uniform(0, np.pi, size=N) # 半月1的角度范圍x1 = (r1 + w1) * np.cos(theta1) # 行向量y1 = (r1 + w1) * np.sin(theta1)label1 = [1 for i in range(1,N+1)] # label for Class 1# 半月2的初始化r2 = 10 # 半月1的半徑,圓心w2 = np.random.uniform(-w / 2, w / 2, size=N) # 半月1的寬度范圍theta2 = np.random.uniform(np.pi, 2 * np.pi, size=N) # 半月1的角度范圍x2 = (r2 + w2) * np.cos(theta2) + ry2 = (r2 + w2) * np.sin(theta2) - dlabel2 = [-1 for i in range(1,N+1)] # label for Class 2data[:,1] = np.concatenate([x1, x2])data[:,2] = np.concatenate([y1, y2])data[:,3] = np.concatenate([label1, label2])return data

三、程序

1.引入庫

import numpy as np import matplotlib.pyplot as plt# from sklearn.cross_validation import train_test_split #用于分割數(shù)據(jù)。 from sklearn.model_selection import train_test_split# ##################### 添加圖片文字 ########################################### from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimSun'] # 指定默認字體 mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題 # ############################################################################

2.主函數(shù)

if __name__ == '__main__':# 初始化參數(shù)N = 1000 # 單個月亮數(shù)據(jù)集數(shù)據(jù)量w = 2r = 8d = 1iter = 50 # 迭代次數(shù)learning_rate = 0.001 # 學習率wn = np.array([1,0,0])data = moon(N,w,r,d)'''隨機采用20%的數(shù)據(jù)用于測試,剩下的80%用于構(gòu)建訓練集合'''data_train,data_test,dn_train,dn_test=train_test_split(data[:,1:3],data[:,3],test_size=0.20,random_state=None)'''訓練數(shù)據(jù)調(diào)整'''train_data = np.ones((1600,3))train_data[:,1:3] = data_traintrain_dn = dn_train'''迭代 訓練 尋找最優(yōu)解wn'''loss,wn = train(train_data,train_dn,wn,iter,learning_rate)print(wn) # 最優(yōu)解wn'''測試數(shù)據(jù)調(diào)整'''test_data = np.ones((400,3))test_data[:,1:3] = data_testtest_dn = dn_test'''測試'''err,acc = test(test_data,test_dn)print('測試結(jié)果 錯誤率:','%.2f'%err)print('測試結(jié)果 正確率:','%.2f'%acc)'''決策平面 y+wx+b=0'''x = np.array(range(-15,25))y = -x*wn[1]/wn[2]-wn[0]/wn[2]'''月亮數(shù)據(jù)集'''plt.figure()plt.title('月亮數(shù)據(jù)集', size=14)plt.xlabel('x 軸', size=14)plt.ylabel('y 軸', size=14)plt.grid(ls=':', color='gray', alpha=0.5) # alpha是透明度plt.scatter(data[0:N,1],data[0:N,2],c='b',s=20,marker='+')plt.scatter(data[N:2*N,1],data[N:2*N,2],c='r',s=20,marker='+')plt.plot(x,y,'k--')plt.savefig('./月亮數(shù)據(jù)集.png')'''損失函數(shù)'''x = [i for i in range(len(loss))]plt.figure()plt.title('損失函數(shù)曲線圖', size=14)plt.xlabel('迭代次數(shù)', size=14)plt.ylabel('均方誤差', size=14)# plt.grid(ls=':', color='gray', alpha=0.5) # alpha是透明度plt.plot(x,loss,c='r',linewidth=2,linestyle='-',marker='o')plt.savefig('./損失函數(shù).png')plt.show()

總結(jié)

從N=1000*2個點中隨機選取80%的點作為訓練集,20%的點作為測試集。迭代50次后,返回最優(yōu)值wn,測試結(jié)果的錯誤率與正確率:
[ 0.656 -0.01167188 0.66452531]
測試結(jié)果 錯誤率: 0.00
測試結(jié)果 正確率: 1.00

畫出決策平面與損失函數(shù),如圖:

完整程序

https://download.csdn.net/download/weixin_43816216/62520810

總結(jié)

以上是生活随笔為你收集整理的基于双月数据集单层感知机_python的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。