python學智能算法(二十)|SVM基礎概念-感知機算法及代碼

引言

前序學習進程中,已經學習了超平面的基礎知識,學習鏈接為:超平面
在此基礎上,要想正確繪制超平面,還需要了解感知機的相關概念。

感知機

感知機是對生物神經網絡的模擬,當輸入信號達到感知機的閾值時,會輸出感應信號,否則不會有任何反應。
這里先對感知機建立數學模型。
對于向量F和向量G,有:
Fˉ=(f0,f1,f2,...,fn),Gˉ=(g0,g1,g2,...,gn)\bar {F}=(f0,f1,f2,...,fn),\bar{G}=(g0,g1,g2,...,gn) Fˉ=(f0,f1,f2,...,fn),Gˉ=(g0,g1,g2,...,gn)定義向量點積:H=Fˉ?Gˉ\ H=\bar {F} \cdot \bar {G}?H=Fˉ?Gˉ

如果滿足:
H={1if?H≥0?1if?H<0H=\left\{ \begin{matrix} 1 \quad \text{\quad if } H\geq 0 \\ -1 \quad \text{if } H< 0 \end{matrix} \right.H={1if?H0?1if?H<0?
相應的,在numpy模塊中,也有一個sign()函數可以對感知機的數學模型進行精煉表達,這有一個代碼實例:

# 引入numpy模塊
import numpy as np
# 引入數據
x=[1,2,3,-6,-8,-10]
# np.sign()函數測試
z=np.sign(x)
print('z=',z)

代碼運行后的輸出效果為:
np。sign()函數輸出效果
非常明顯,對于非負數,np.sign()函數輸出1,對于負數則直接輸出0。

一個關于感知機的項目

這里有一個感知機算法的簡單項目:

# 引入模塊
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from matplotlib.colors import ListedColormap# 定義隨機數種子
# 定義了隨機數種子后,每次產生的隨機數是一樣的
# 使用不同的隨機數種子,會得到不同的初始隨機數
np.random.seed(88)def perceptron_learning_algorithm(x, y):# W是3個在[0,1)區間上均勻分布的隨機數w = np.random.rand(3)# misclassified_examples是由predict()函數計算獲得misclassified_examples = predict(hypothesis, x, y, w)while misclassified_examples.any():x_example, expect_y = pick_one_from(misclassified_examples, x, y)# 更新權重w = w + x_example * expect_y# 重新代入predict()函數進行評估misclassified_examples = predict(hypothesis, x, y, w)return w# hypothesis函數對w和x兩個向量的點積進行感知機運算
# hypothesis函數返回值是1或者-1
def hypothesis(x, w):return np.sign(np.dot(w, x))# predict函數包括4個變量
def predict(hypothesis_function, x, y, w):# np.apply_along_axis函數先將x按照行取出,這是由axis=1決定的取值方式# hypothesis_function每次接收x的一行和wpredictions = np.apply_along_axis(hypothesis_function, 1, x, w)# y != predictions表示分類錯誤,這個!代表的不等于判斷會輸出布爾結果False和True# x[y != predictions]直接輸出x[y != predictions]取值為True時對應x行的數據misclassified = x[y != predictions]return misclassified# pick_one_from函數
def pick_one_from(misclassified_examples, x, y):# 隨機打亂分類樣本的順序np.random.shuffle(misclassified_examples)t = misclassified_examples[0]index = np.where(np.all(x == t, axis=1))[0][0]return x[index], y[index]# 使用sklearn生成線性可分的數據集
x, y = make_classification(n_samples=100,n_features=2,n_redundant=0,n_informative=2,n_clusters_per_class=1,random_state=42,class_sep=2.0
)# 將標簽從0/1轉換為-1/1
y = np.where(y == 0, -1, 1)# 添加偏置項
x_augmented = np.c_[np.ones(x.shape[0]), x]# 訓練感知機模型
w = perceptron_learning_algorithm(x_augmented, y)
print("感知機權重:", w)# 繪制分類效果圖
plt.figure(figsize=(10, 8))# 繪制數據點
plt.scatter(x[y==1][:, 0], x[y==1][:, 1], c='blue', marker='o', label='Class +1', edgecolor='k', s=70)
plt.scatter(x[y==-1][:, 0], x[y==-1][:, 1], c='red', marker='o', label='Class -1', s=70)# 繪制決策邊界
x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1
y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))# 預測網格點的分類
Z = np.array([hypothesis(np.array([1, a, b]), w) for a, b in zip(xx.ravel(), yy.ravel())])
Z = Z.reshape(xx.shape)# 繪制分類區域
cmap_light = ListedColormap(['#FFAAAA', '#AAAAFF'])
plt.contourf(xx, yy, Z, cmap=cmap_light, alpha=0.3)# 繪制決策邊界
plt.contour(xx, yy, Z, levels=[0], linewidths=2, colors='black')# 添加圖例和標題
plt.title('Perceptron Classification Results', fontsize=16)
plt.xlabel('Feature 1', fontsize=14)
plt.ylabel('Feature 2', fontsize=14)
plt.legend(loc='upper right', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.tight_layout()plt.show()

代碼運行后,會獲得直接的分類效果:
感知機
下一件文章將詳細解讀代碼。

總結

學習了感知機的基本概念。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89085.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89085.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89085.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

操作HTML網頁

一、HTML網頁的介紹 HTML&#xff0c;即超文本標記語言&#xff08;HyperText Markup Language&#xff09;&#xff0c;它不是一種編程語言&#xff0c;而是一種標記語言&#xff0c;用于描述網頁的結構。HTML 通過一系列標簽來定義網頁中的各種元素&#xff0c;如文本、圖片…

Django--03視圖和模板

Django–03視圖和模板 Part 3: Views and templates 本教程承接第二部分&#xff0c;我們將繼續開發投票應用&#xff0c;重點介紹 Django 的表單處理和通用視圖。 文章目錄Django--03視圖和模板前言概述一、編寫更多視圖二、編寫實際執行操作的視圖三、快捷方式&#xff1a;r…

《每日AI-人工智能-編程日報》--2025年7月15日

介紹&#xff1a;AI &#xff1a;英偉達恢復向中國銷售 H20 并推出新 GPU&#xff1a;7 月 15 日&#xff0c;英偉達官宣將恢復向中國銷售 H20&#xff0c;并推出全新的 NVIDIA RTX PRO GPU&#xff0c;其中 B30 性能約為 H20 的 75%&#xff0c;定價在 6500 至 8000 美元之間&…

C++STL-list

一.基礎概念相當于數據結構里面的雙向鏈表二.基礎操作1.list對象創建1. 默認構造函數list<int> l1;2. 初始化列表list<int> l2_1 { 9,8,7,6,5 };list<int> l2_2({ 9, 8, 7, 1, 5 });3. 迭代器list <int> l3(l2_1.begin(), l2_1.end());4. 全0初始化li…

【PTA數據結構 | C語言版】字符串插入操作

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將給定字符串 t 插入到另一個給定字符串 s 的第 pos 個字符的位置。 輸入格式&#xff1a; 輸入先后給出主串 s 和待插入的字符串 t&#xff0c;每個非空字符串占一行&#…

Postman + Newman + Jenkins 接口自動化測試

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 </

CAS單點登錄架構詳解

目錄 概述核心概念 TGC (Ticket Granting Cookie)TGT (Ticket Granting Ticket)ST (Service Ticket) 架構設計 整體架構存儲架構安全機制 工作流程 完整登錄時序流程步驟詳解 技術實現 會話管理數據同步問題最佳實踐 參考資料 概述 CAS (Central Authentication Service) 是…

C++中正則表達式詳解和實戰示例

C 中的正則表達式&#xff08;Regular Expression&#xff09;主要通過標準庫 <regex> 提供&#xff0c;能夠用于字符串匹配、查找、替換、驗證格式等。它在 C11 中首次引入&#xff0c;并在 C14 和 C17 中逐步完善。一、頭文件和命名空間 #include <regex> #inclu…

深入解析Avro、Protobuf與JSON:序列化技術的選擇與應用

在現代分布式系統和數據交換場景中&#xff0c;序列化技術是數據存儲、傳輸和通信的核心。本文深入探討三種主流序列化技術&#xff1a;Avro、Protobuf 和 JSON&#xff0c;從背景、特點、示例代碼&#xff08;Python&#xff09;、優勢及最佳實踐等多個維度進行對比分析&#…

Vue 中 effectScope() 的全面解析與實戰應用

一、effectScope 概述1.1 什么是 effectScopeeffectScope() 是 Vue 3.2 引入的核心 API&#xff0c;用于創建副作用作用域容器。它能夠將多個響應式副作用&#xff08;如 watch、watchEffect 和 computed&#xff09;組織在一起&#xff0c;實現統一的生命周期管理。1.2 核心價…

嵌入式面試八股文(十六)·一文搞懂嵌入式常用名詞IC、ASIC、CPU、MPU、MCU、SoC、SoPC、GPU、DSP

目錄 1. IC&#xff08;Integrated Circuit&#xff0c;集成電路&#xff09; 2. ASIC&#xff08;Application-Specific Integrated Circuit&#xff0c;專用集成電路&#xff09; 3. CPU&#xff08;Central Processing Unit&#xff0c;中央處理器&#xff09; 4. M…

安全參綉25暑假第一次作業

第一天 1.首先講了d0cker的部署&#xff0c; 這個是第一個Vulhub漏洞環境。所有環境都使用D0cker容器化&#xff0c;使其易于部署和隔離測試。 其中&#xff0c;國內的阿里用不了&#xff0c;你得搞個代理&#xff0c;下國外的&#xff1a;入門指南 | Vulhub 然后按這個…

RocketMQ源碼級實現原理-消息消費總覽

Overview可以看到&#xff0c;pull message和consume message實際上是兩個過程&#xff0c;但是對于用戶是透明的 注意這三個Offset的含義&#xff0c;physical offset就是commitLog中的全局偏移量分發dispatch如上圖&#xff0c;Topic的每個queue&#xff0c;都綁定了唯一的一…

linux打包固件shell腳本

不打包 pack.sh解壓后無父目錄&#xff08;直接是文件&#xff09;生成 checksum.txt&#xff08;包含所有文件的 SHA256&#xff09;打包后 .tar.gz 移動到上級目錄#!/bin/bash# 檢查是否傳入版本號參數 if [ -z "$1" ]; thenecho "Usage: $0 <version> …

用uniapp開發鴻蒙應用(暫停更新-根據項目更新,現在項目未開始)

1.根據博客生成.hap文件 【鴻蒙HarmonyOS開發技巧&#xff1a;如何不依賴華為商店直接安裝uniapp生成的app文件&#xff1f;一鍵轉換app至hap格式教程詳解】_entry-default-signed.hap-CSDN博客 根據網絡查詢鴻蒙手機安裝測試app&#xff0c;需要電腦命令安裝 在鴻蒙HarmonyOS手…

Linux 文件系統實現層詳解:原理、結構與驅動銜接

&#x1f4c2; Linux 文件系統實現層詳解&#xff1a;原理、結構與驅動銜接 &#x1f3ac; 推薦搭配視頻學習&#xff1a;Linux 文件系統子系統&#xff1a;三層架構全面掌握 一、為什么要重點理解文件系統實現層&#xff1f; 文件系統實現層是 Linux 文件系統的“地基”&…

區塊鏈應用場景深度解讀:金融領域的革新與突破

引言&#xff1a;區塊鏈技術的演進與金融領域的變革區塊鏈技術自2008年誕生以來&#xff0c;以其去中心化、不可篡改、可追溯等特性&#xff0c;在全球范圍內引發了金融領域的深刻變革。從最初的數字貨幣實驗&#xff0c;到如今在跨境支付、證券交易、供應鏈金融等領域的廣泛應…

redisson tryLock

應用場景RLock rLock redissonClient.getLock(Constant_LOCK request.getId()); try {boolean isLocked rLock.tryLock();if (!isLocked) {throw new ServiceException(ErrConstant.OPERATION_FAILED, "請勿重復提交");}源碼public interface RLock extends Lock,…

前端docx庫實現將html頁面導出word

前言&#xff1a;最近遇到一個需求&#xff0c;需要將頁面的html導出為word文檔&#xff0c;并且包含橫向和豎向頁面&#xff0c;并且可以進行混合方向導出。經過一段時間的實驗&#xff0c;發現只有docx這個庫滿足這個要求。在這里記錄一下實現思路以及代碼。 docx官網 一、…

虛擬主機CPU占用100導致打不開的一次處理

背景 突然有一天&#xff0c;有個客戶網站打不開了&#xff0c;發來這樣一張圖片問題排查 打開阿里云虛擬主機控制面板&#xff0c;CPU 使用率已經達到了100%&#xff0c;這說明網站已經在高負荷運轉。分析訪問日志發現&#xff0c;網站出現了大量循環路徑&#xff0c;其 UserA…