【幾何角度】感知機

本質:將n維空間中的一些點線性投影到一維,在一維軸上找一個閾值對這些點進行二分類。

程序:

import numpy as npclass Perceptron:def __init__(self, learning_rate=0.01, n_iterations=1000):self.learning_rate = learning_rateself.n_iterations = n_iterationsdef fit(self, X, y):self.weights = np.zeros(1 + X.shape[1])self.errors = []for _ in range(self.n_iterations):error = 0for xi, target in zip(X, y):update = self.learning_rate * (target - self.predict(xi))self.weights[1:] += update * xiself.weights[0] += updateerror += int(update != 0.0)self.errors.append(error)return selfdef net_input(self, X):return np.dot(X, self.weights[1:]) + self.weights[0]def predict(self, X):return np.where(self.net_input(X) >= 0.0, 1, -1)# 創建一些簡單的訓練數據
X_train = np.array([[2, 3], [4, 5], [1, 2], [5, 3]])
y_train = np.array([1, 1, -1, -1])# 創建感知機對象并進行訓練
perceptron = Perceptron()
perceptron.fit(X_train, y_train)# 進行預測
X_test = np.array([[3, 4], [1, 1]])
predictions = perceptron.predict(X_test)
print("Predictions:", predictions)print(X_train.shape[1])
print(perceptron.weights)

逐句解釋:

1,

import numpy as np

這一行導入了 NumPy 庫,NumPy 是 Python 中用于科學計算的一個核心庫,它提供了強大的數組和矩陣操作功能。

2,

class Perceptron:

這一行定義了一個名為 Perceptron 的類,用于實現感知機算法。

3,

  def __init__(self, learning_rate=0.01, n_iterations=1000):

這是 Perceptron 類的構造函數,用于初始化感知機的學習率和迭代次數,默認學習率為 0.01,迭代次數為 1000。

4,

        self.learning_rate = learning_rateself.n_iterations = n_iterations

這兩行將傳入的學習率和迭代次數保存在類的實例變量中,以便在類的其他方法中使用。

5,

    def fit(self, X, y):

這是 Perceptron 類的方法,用于訓練感知機模型。它接受輸入數據 X 和標簽 y 作為參數。

6,

        self.weights = np.zeros(1 + X.shape[1])

這一行創建了一個初始權重向量,長度為輸入特征數加 1,所有元素初始化為零。權重向量的第一個元素對應于偏置項。

7,

        self.errors = []

這一行創建了一個空列表,用于保存每次迭代中誤分類樣本的數量,以便后續可視化訓練過程中的錯誤。

8,

        for _ in range(self.n_iterations):

這是一個迭代循環,用于執行感知機的訓練過程,循環次數由 n_iterations 指定。

9,

            error = 0

在每次迭代開始時,將誤分類樣本的計數器初始化為零。

10,

            for xi, target in zip(X, y):

這是一個嵌套循環,遍歷輸入數據 X 和對應的標簽 y,其中 xi 是當前樣本的特征向量,target 是當前樣本的真實標簽。

11,

                update = self.learning_rate * (target - self.predict(xi))

計算當前樣本的預測結果與真實標簽之間的誤差,并乘以學習率,得到權重更新值。

12,

                self.weights[1:] += update * xiself.weights[0] += update

根據誤差更新權重向量。更新規則是:對于權重向量中除了偏置項以外的元素,按照輸入特征與誤差的乘積更新;偏置項單獨更新。

13,

                error += int(update != 0.0)

更新誤分類樣本的計數器。

14,

            self.errors.append(error)

將當前迭代的誤分類樣本數量添加到錯誤列表中。

15,

        return self

訓練結束后,返回訓練好的感知機模型。

16,

    def net_input(self, X):

這是一個輔助方法,用于計算感知機的輸入,即輸入數據與權重向量的線性組合。

17,

        return np.dot(X, self.weights[1:]) + self.weights[0]

計算輸入數據 X 與權重向量除偏置項外的部分的點積,再加上偏置項,得到感知機的輸入。

18,

    def predict(self, X):

這是 Perceptron 類的方法,用于對輸入數據進行預測。

19,

        return np.where(self.net_input(X) >= 0.0, 1, -1)

根據感知機的輸入,通過閾值函數(大于等于0即為正類,否則為負類)對輸入數據進行分類預測,返回預測結果。

20,

接下來是主程序部分,用于創建數據、訓練感知機模型和進行預測。

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

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

相關文章

【Python基礎】一文搞懂:Python 中 “requirements.txt“ 文件生成和使用

文章目錄 1 引言2 什么是 requirements.txt?3 如何生成 requirements.txt?3.1 方法一:使用 pip freeze3.2 方法二:使用 pipreqs 3.3 使用 pip freeze 和 pipreqs 的對比4 如何使用 requirements.txt?4.1 安裝依賴4.2 更…

[從零開發JS應用] 如何在VScode中配置Javascript環境,常見的調試方法有哪些?

一、安裝VSCode和Node.js 記錄環境配置:本文配置的環境主要針對單獨JS文件的斷點調試,主要是為了調試LeetCode里面的代碼。 首先在官網下載對應的版本:https://nodejs.org/en/ 開始安裝,可以自定義選擇安裝路徑。 這里選擇Add Pa…

【親測,安卓版】快速將網頁網址打包成安卓app,一鍵將網頁打包成app,免安裝純綠色版本,快速將網頁網址打包成安卓apk

背景:部分客戶需求將自己網站打包成app,供用戶在瀏覽器安裝使用、 網頁網址快速生成app 準備材料操作流程第一步:打開HBuilder X新建項目第二步創建Wap2App項目第三步修改App圖標第四步發布app第五步查看apk 準備材料 1.需要打包的網頁 2.ap…

在網頁開發中,前后端如何更好地協同工作?

在網頁開發中,前后端如何更好地協同工作是非常關鍵的,以下是一些方法和技巧可以幫助前后端更好地協同工作: 1.明確需求和規范:前后端應該共同討論和明確項目的需求和規范,包括功能、界面、數據格式等。確保雙方對項目…

頁面加載不出來,報錯[@umijs/runtime] load component failed

問題描述 頁面加載不出來數據,一直在旋轉,控制臺輸出內容如下: 原因分析: 之前頁面是沒有問題的,在寫當前頁面突然出現頁面加載不出來,控制臺報錯,主要是頁面引入了這行代碼報錯 import { …

MX Component基礎使用(多點位讀取,多點位寫入)

步驟,先連接PLC,然后在填入對應的點位 D10 然后去讀取。 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;us…

邊緣計算網關的主要功能有哪些?天拓四方

隨著物聯網(IoT)的快速發展和普及,邊緣計算網關已經成為了數據處理和傳輸的重要樞紐。作為一種集成數據采集、協議轉換、數據處理、數據聚合和遠程控制等多種功能的設備,邊緣計算網關在降低網絡延遲、提高數據處理效率以及減輕云數…

民國漫畫雜志《時代漫畫》第13期.PDF

時代漫畫13.PDF: https://url03.ctfile.com/f/1779803-1247458360-14efab?p9586 (訪問密碼: 9586) 《時代漫畫》的雜志在1934年誕生了,截止1937年6月戰爭來臨被迫停刊共發行了39期。 ps:資源來源網絡!

數組的定義、順序存儲及特殊矩陣的存儲

目錄 一、數組的定義 1.1概念 1.2抽象數據類型定義 二、數組的順序存儲 2.1一維數組元素的存儲位置 2.2二維數組元素的存儲位置 2.3三維數組元素的存儲位置 三、特殊矩陣的壓縮存儲 3.1相關概念 3.2對稱矩陣 3.3三角矩陣 3.4對角矩陣(帶狀矩陣&#xff0…

【機器學習300問】102、什么是混淆矩陣?

一、混淆矩陣的定義 混淆矩陣是一種用于評估分類模型性能的評估指標。當模型對數據進行預測并將數據分配到預定義的類別時,混淆矩陣提供了一種直觀的方式來總結這些預測與數據實際類別之間的對應關系。具體來說,它是一個表格。 二、分類模型性能評估一級…

私域用戶畫像分析

為什么做私域要分析用戶畫像? 1、更好地了解用戶需求:通過分析用戶畫像,可以深入了解用戶的需求、偏好、行為等特征,從而更好地滿足他們的需求。 2、個性化營銷:根據用戶畫像,可以為用戶提供個性化的營銷…

js setTimeout、setInterval、promise、async await執行順序梳理

基礎知識 async: 關鍵字用于標記一個函數為異步函數,該函數中有一個或多個promise對象,需要等待執行完成后才會繼續執行。 await:關鍵字,用于等待一個promise對象執行完,并返回其中的值,只能在async函數內部使用。可…

云服務器平臺AutoDL--基本介紹與使用感受

因為課程作業需要復現DreamBooth,找了幾個教程之后,發現了AutoDL這個好東西,蕪湖~ 相關概念 以下回答來自于ChatGPT。 云計算平臺:云服務器平臺是提供按需計算資源和服務的在線平臺,通常包括存儲、處理能力、數據庫、…

搜維爾科技:使用Haption Virtuose 6D 力反饋通過機器人和虛擬現實完成遠程操作項目

使用Haption Virtuose 6D 力反饋通過機器人和虛擬現實完成遠程操作項目 搜維爾科技:使用Haption Virtuose 6D 力反饋通過機器人和虛擬現實完成遠程操作項目

【Python設計模式06】代理模式

代理模式(Proxy Pattern)是一種結構型設計模式,它通過創建代理對象來控制對另一個對象的訪問。代理模式可以用于延遲實例化、控制訪問權限、記錄日志等。代理模式的核心思想是為其他對象提供一種代理,以控制對這個對象的訪問。 代…

System32文件夾千萬不能刪除,看完這篇你就知道為什么了

序言 C:\Windows\System32目錄是Windows操作系統的關鍵部分,重要的系統文件存儲在該目錄中。網上的一些惡作劇者可能會告訴你刪除它,但你不應該嘗試去操作,如果你嘗試的話,我們會告訴你會發生什么。 什么是System32文件夾 位于C:\Windows\System32的System32文件夾是所有…

Python深度學習:【模型系列】Transformer面試靈魂20問

1. transformer簡介 Transformer模型是一種基于自注意力機制的神經網絡架構,主要用于處理序列數據,如自然語言處理任務。它由Google在2017年提出,并在“Attention is All You Need”這篇論文中首次公開。Transformer模型的核心思想是利用自注意力機制來捕捉序列中的依賴關系…

MySQL 的表約束詳解

在數據庫設計中,約束(Constraints)是確保數據完整性和一致性的關鍵工具。MySQL 作為流行的關系型數據庫管理系統,提供了多種約束類型來維護數據的準確性和可靠性。本文將詳細探討 MySQL 的各種表約束,包括它們的定義、…

【代碼隨想錄】面試常考類型之動態規劃01背包

前言 更詳細的在大佬的代碼隨想錄 (programmercarl.com) 本系列僅是簡潔版筆記,為了之后方便觀看 不同的二叉搜索樹 96. 不同的二叉搜索樹 - 力扣(LeetCode) 通過舉例子發現重疊子問題 代碼很簡單,主要是思路問題&#xff0…

Windows內核函數 - 創建關閉注冊表

在驅動程序的開發中,經常會用到對注冊表的操作。與Win32的API不同,DDK提供另外一套對注冊表操作的相關函數。首先明確一下注冊表里的幾個概念,避免在后面混淆。 圖1 注冊表概念 有5個概念需要重申一下: * 注冊表項: 注…