基于双月数据集单层感知机_python
- 前言
- 一、單層感知機
- 二、雙月數據集
- 三、程序
- 1.引入庫
- 2.主函數
- 總結
- 完整程序
前言
本文主要針對雙月數據集實現二分類問題。
一、單層感知機
單層感知機目標是將被感知數據集劃分為兩類的分離超平面,并計算出該超平面。單層感知機是二分類的線性分類模型,輸入是被感知數據集的特征向量,輸出時數據集的類別{+1,-1}。感知器的模型可以簡單表示為:
該函數稱為單層感知機,其中w是網絡的N維權重向量,b是網絡的N維偏置向量, w.x是w和x的內積,w和b的N維向量取值要求在實數域。
本文是將感知機模型簡化,將權值b合并到w里進行更新,簡化了計算。
sign函數是感知機的早期激活函數,后面又演化出一系列的激活函數。激活函數一般采用非線性激活函數,以增強網絡的表達能力。常見的激活函數有:sign, sigmoid,tanh,ReLU等。
二、雙月數據集
根據圓的參數方程,設置圓的角度與雙月寬度兩個隨機參數生成雙月數據點集。
初始值為:
N = 1000 # 單個月亮數據集數據量
w = 2
r = 8
d = 1
iter = 50 # 迭代次數
learning_rate = 0.001 # 學習率
wn = np.array([1,0,0])
三、程序
1.引入庫
import numpy as np import matplotlib.pyplot as plt# from sklearn.cross_validation import train_test_split #用于分割數據。 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.主函數
if __name__ == '__main__':# 初始化參數N = 1000 # 單個月亮數據集數據量w = 2r = 8d = 1iter = 50 # 迭代次數learning_rate = 0.001 # 學習率wn = np.array([1,0,0])data = moon(N,w,r,d)'''隨機采用20%的數據用于測試,剩下的80%用于構建訓練集合'''data_train,data_test,dn_train,dn_test=train_test_split(data[:,1:3],data[:,3],test_size=0.20,random_state=None)'''訓練數據調整'''train_data = np.ones((1600,3))train_data[:,1:3] = data_traintrain_dn = dn_train'''迭代 訓練 尋找最優解wn'''loss,wn = train(train_data,train_dn,wn,iter,learning_rate)print(wn) # 最優解wn'''測試數據調整'''test_data = np.ones((400,3))test_data[:,1:3] = data_testtest_dn = dn_test'''測試'''err,acc = test(test_data,test_dn)print('測試結果 錯誤率:','%.2f'%err)print('測試結果 正確率:','%.2f'%acc)'''決策平面 y+wx+b=0'''x = np.array(range(-15,25))y = -x*wn[1]/wn[2]-wn[0]/wn[2]'''月亮數據集'''plt.figure()plt.title('月亮數據集', 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('./月亮數據集.png')'''損失函數'''x = [i for i in range(len(loss))]plt.figure()plt.title('損失函數曲線圖', size=14)plt.xlabel('迭代次數', 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('./損失函數.png')plt.show()總結
從N=1000*2個點中隨機選取80%的點作為訓練集,20%的點作為測試集。迭代50次后,返回最優值wn,測試結果的錯誤率與正確率:
[ 0.656 -0.01167188 0.66452531]
測試結果 錯誤率: 0.00
測試結果 正確率: 1.00
畫出決策平面與損失函數,如圖:
完整程序
https://download.csdn.net/download/weixin_43816216/62520810
總結
以上是生活随笔為你收集整理的基于双月数据集单层感知机_python的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 旅人随笔[01] 何为开源?
- 下一篇: win7 mysql 应用程序无法启动因