Python特征工程 — 1.4 特征歸一化方法詳解

目錄

1 Min-Max歸一化

方法1:自定義的Min-Max歸一化封裝函數

方法2:?scikit-learn庫中的MinMaxScaler

2 Z-score歸一化

方法1:自定義的Z-score歸一化封裝函數

方法2:?scikit-learn庫中的StandardScaler

3 最大值歸一化

4 L1歸一化

方法1:自定義的Z-score歸一化封裝函數

方法2:?scikit-learn庫中的Normalizer

5 L2歸一化

方法1:自定義的L2歸一化歸一化封裝函數

方法2:?scikit-learn庫中的Normalizer

6?Box-Cox歸一化

方法1:自定義的L2歸一化歸一化封裝函數

方法2:?scipy庫的boxcox

7 選擇哪種歸一化


實驗數據:鏈接:https://pan.baidu.com/s/1yT1ct_ZM5uFLgcYsaBxnHg?pwd=czum? 提取碼:czum?

實驗數據介紹:參考文章1.2節(數據介紹鏈接)

1 Min-Max歸一化

最小-最大歸一化(Min-Max Normalization)是一種將數據縮放到特定范圍內的線性變換方法,通常是[0, 1]。這種方法保證了數據的最小值被映射為0,最大值被映射為1,中間的值則按比例進行縮放。

最小-最大歸一化的公式為:

其中,是歸一化后的值,x 是原始數據點,max(x) 和 min(x) 分別是數據集中的最大值和最小值。

示例程序將使用兩種方法實現,自定義的最小-最大歸一化封裝函數,并使用scikit-learn庫中的MinMaxScaler類作為第二種方法來實現歸一化。以下是具體的實現:

方法1:自定義的Min-Max歸一化封裝函數

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 定義最小-最大歸一化函數,使其能夠處理DataFrame或Series
def min_max_normalization(data):# 檢查數據是否為pandas Series或DataFrameif isinstance(data, pd.Series):# 如果是Series,直接應用歸一化min_val = data.min()max_val = data.max()data_normalized = (data - min_val) / (max_val - min_val)return data_normalizedelif isinstance(data, pd.DataFrame):# 如果是DataFrame,逐列應用歸一化return (data - data.min()) / (data.max() - data.min())else:raise ValueError("Input data must be a pandas Series or DataFrame")# 方法一:使用自定義函數進行歸一化
data_normalized_custom = min_max_normalization(data['Total_Spending'])

方法2:?scikit-learn庫中的MinMaxScaler

from sklearn.preprocessing import MinMaxScaler# 方法二:使用 scikit-learn 的 MinMaxScaler 進行歸一化
scaler = MinMaxScaler()
data_normalized_sklearn = scaler.fit_transform(data[['Total_Spending']])
plt.figure(figsize=(14, 5))
# 繪制原始數據和歸一化數據的對比圖
plt.subplot(1, 2, 1)
# 繪制原始數據的線條圖
plt.plot(data['Total_Spending'], marker='o')
plt.title('Original Data')
plt.xlabel('Index')
plt.ylabel('Value')plt.subplot(1, 2, 2)
# 繪制自定義歸一化方法的數據的線條圖
plt.plot(data_normalized_custom, label='Normalized (Custom)', linestyle='--', marker='x')
# 繪制 scikit-learn 歸一化方法的數據的線條圖
plt.plot(data_normalized_sklearn, label='Normalized (scikit-learn)', linestyle='-.', marker='s')# 添加圖例、標題和坐標軸標簽
# plt.legend(loc='upper center')
plt.title('min_max_normalization')
plt.xlabel('Index')
plt.ylabel('Value')

運行結果如下:?

2 Z-score歸一化

?Z-score歸一化,也稱為標準化(Standardization),是一種將數據按比例縮放至特定均值(mean)和標準差(standard deviation)的方法。其目的是將數據轉換為一個標準分布,其中數據的均值為0,標準差為1。Z-score歸一化它確保了不同特征具有相同的尺度和分布特性。?

示例程序將使用兩種方法實現,自定義的最小-最大歸一化封裝函數,并使用scikit-learn庫中的StandardScaler類作為第二種方法來實現歸一化。以下是具體的實現:

方法1:自定義的Z-score歸一化封裝函數

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 使用自定義函數進行Z-score歸一化
def z_score_normalization(data):if isinstance(data, (pd.Series, pd.DataFrame)):mean = data.mean()std = data.std()data_normalized = (data - mean) / stdreturn data_normalizedelse:raise ValueError("Input data must be a pandas Series or DataFrame")# 使用自定義函數進行Z-score歸一化
data_normalized_custom = z_score_normalization(data.iloc[:, 7:10])

方法2:?scikit-learn庫中的StandardScaler

from sklearn.preprocessing import StandardScaler# 使用 scikit-learn 的 StandardScaler 進行Z-score歸一化
scaler = StandardScaler()
data_normalized_sklearn = scaler.fit_transform(data.iloc[:, 7:10])
data_normalized_sklearn = pd.DataFrame(data_normalized_sklearn, columns=data.columns[7:10])

?運行結果如下,選取的3個數據有不同的尺度,最后歸一化到了0-1的范圍:??

3 最大值歸一化

最大最小值歸一化(Min-Max Normalization)是一種線性變換,它將數據的最小值映射到0,最大值映射到1,所有其他值按比例映射到0和1之間。

最大最小值歸一化的公式為:

其中:x?是原始數據點,x′?是歸一化后的數據點,min(x)?是數據中的最小值,max(x)?是數據中的最大值。

示例程序自定義的最小-最大歸一化封裝函數,以下是具體的實現:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 使用自定義函數進行最大最小值歸一化
def min_max_normalization(data):if isinstance(data, (pd.Series, pd.DataFrame)):data_normalized = (data - data.min()) / (data.max() - data.min())return data_normalizedelse:raise ValueError("Input data must be a pandas Series or DataFrame")# 使用自定義函數進行最大最小值歸一化
data_normalized_custom = min_max_normalization(data.iloc[:, 7:10])# 繪制原始數據和歸一化數據的對比圖
plt.figure(figsize=(14, 5))plt.subplot(1, 2, 1)
# 繪制原始數據的線條圖,假設我們有3列數據
for idx, col in enumerate(data.columns[7:10]):plt.plot(data.index, data[col], marker='o', linewidth=1, markersize=3)plt.title('Original Data')
plt.xlabel('Index')
plt.ylabel('Value')plt.subplot(1, 2, 2)
# 繪制自定義最大最小值歸一化方法的數據的線條圖
for idx, col in enumerate(data.columns[7:10]):plt.plot(data.index, data_normalized_custom[col], linestyle='--', marker='x', linewidth=1, markersize=3)# 添加圖例、標題和坐標軸標簽
plt.title('Min-Max Normalization')
plt.xlabel('Index')
plt.ylabel('Normalized Value')# 顯示圖形
plt.tight_layout()
plt.show()

運行結果如下:

4 L1歸一化

L1歸一化,也稱為曼哈頓距離歸一化或1-范數歸一化,是一種將數據的特征向量按其絕對值的總和進行歸一化的方法。其目的是將每個特征的絕對值加和為1。L1歸一化在某些特定的機器學習算法中很有用,比如在L1正則化(Lasso回歸)中。

L1歸一化的公式為:

  • x?是原始數據向量。
  • x′?是歸一化后的數據向量。
  • ∑∣x∣?是向量x中所有元素絕對值的總和。

L1歸一化的優點包括:

  • 它對異常值具有一定的魯棒性,因為異常值不會像在L2歸一化中那樣對結果產生過大的影響。
  • 它可以將數據轉換為稀疏表示,這在某些類型的機器學習算法中是有利的。

示例程序將使用兩種方法實現,自定義的L1歸一化封裝函數,并使用scikit-learn庫中的Normalizer類作為第二種方法來實現歸一化。以下是具體的實現:

方法1:自定義的Z-score歸一化封裝函數

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 使用自定義函數進行L1歸一化
def l1_normalization(data):if isinstance(data, pd.Series):data = data.to_frame()  # 將Series轉換為DataFrameif isinstance(data, pd.DataFrame):norms = np.abs(data).sum(axis=1)data_normalized = data.div(norms, axis=0)return data_normalizedelse:raise ValueError("Input data must be a pandas Series or DataFrame")# 使用自定義函數進行L1歸一化
data_normalized_custom = l1_normalization(data.iloc[:, 7:10])

方法2:?scikit-learn庫中的Normalizer

from sklearn.preprocessing import Normalizer# 使用 scikit-learn 的 Normalizer 進行L1歸一化
normalizer = Normalizer(norm='l1')
data_normalized_sklearn_l1 = normalizer.fit_transform(data.iloc[:, 7:10])
data_normalized_sklearn_l1 = pd.DataFrame(data_normalized_sklearn_l1, columns=data.columns[7:10])
# 繪制原始數據和歸一化數據的對比圖
plt.figure(figsize=(14, 5))
plt.subplot(1, 2, 1)
# 繪制原始數據的線條圖
for idx, col in enumerate(data.columns[7:10]):plt.plot(data.index, data[col], label=f'Original {col}', marker='o', linewidth=1, markersize=3)plt.title('Original Data')
plt.xlabel('Index')
plt.ylabel('Value')
plt.subplot(1, 2, 2)
# 繪制自定義L1歸一化方法的數據的線條圖
for idx, col in enumerate(data_normalized_custom.columns):plt.plot(data.index, data_normalized_custom[col], linestyle='--', marker='x', linewidth=1, markersize=3)
# 繪制自定義L1歸一化方法的數據的線條圖
for idx, col in enumerate(data_normalized_sklearn_l1.columns):plt.plot(data.index, data_normalized_sklearn_l1[col], linestyle='--', marker='x', linewidth=1, markersize=3)# 添加圖例、標題和坐標軸標簽
plt.title('L1 Normalization')
plt.xlabel('Index')
plt.ylabel('Normalized Value')# 顯示圖形
plt.tight_layout()
plt.show()

運行結果如下:

5 L2歸一化

L2歸一化,也稱為歐幾里得歸一化或2-范數歸一化,是一種將數據的特征向量按其平方和的平方根進行歸一化的方法。其目的是將每個特征的平方和除以向量的歐幾里得范數,使得每個特征向量的范數為1。L2歸一化在許多機器學習算法中很有用,特別是在需要考慮距離度量時,例如在K近鄰(KNN)算法中。

L2歸一化的公式為:

其中:x?是原始數據向量,′x′?是歸一化后的數據向量。∑x2?是向量x中所有元素平方的總和。

L2歸一化的優點包括:

  • 它對數據的每個維度賦予了相等的重要性,因為它是基于向量的歐幾里得距離。
  • 它在處理需要考慮角度和方向的應用中有廣泛的應用,如在圖像識別和計算機視覺中。

示例程序將使用兩種方法實現,自定義的L2歸一化封裝函數,并使用scikit-learn庫中的Normalizer類作為第二種方法來實現歸一化。以下是具體的實現:

方法1:自定義的L2歸一化歸一化封裝函數

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import Normalizer# 使用自定義函數進行L2歸一化
def l2_normalization(data):if isinstance(data, (pd.Series, pd.DataFrame)):norms = np.sqrt(np.sum(data**2, axis=1))data_normalized = data.div(norms, axis=0)return data_normalizedelse:raise ValueError("Input data must be a pandas Series or DataFrame")# 使用自定義函數進行L2歸一化
data_normalized_custom = l2_normalization(data.iloc[:, 7:10])

方法2:?scikit-learn庫中的Normalizer

# 使用 scikit-learn 的 Normalizer 進行L2歸一化
normalizer = Normalizer(norm='l2')
data_normalized_sklearn_l2 = normalizer.fit_transform(data.iloc[:, 7:10])
data_normalized_sklearn_l2 = pd.DataFrame(data_normalized_sklearn_l2, columns=data.columns[7:10])
# 繪制原始數據和歸一化數據的對比圖
plt.figure(figsize=(14, 5))plt.subplot(1, 2, 1)
# 繪制原始數據的線條圖
for idx, col in enumerate(data.columns[7:10]):plt.plot(data.index, data[col], label=f'Original {col}', marker='o', linewidth=1, markersize=3)plt.title('Original Data')
plt.xlabel('Index')
plt.ylabel('Value')plt.subplot(1, 2, 2)
# 繪制自定義L2歸一化方法的數據的線條圖
for idx, col in enumerate(data_normalized_custom.columns):plt.plot(data.index, data_normalized_custom[col], linestyle='--', marker='x', linewidth=1, markersize=3)# 繪制 scikit-learn L2歸一化方法的數據的線條圖
for idx, col in enumerate(data_normalized_sklearn_l2.columns):plt.plot(data.index, data_normalized_sklearn_l2[col], linestyle='-.', marker='s', linewidth=1, markersize=3)# 添加圖例、標題和坐標軸標簽
plt.title('L2 Normalization')
plt.xlabel('Index')
plt.ylabel('Normalized Value')# 顯示圖形
plt.tight_layout()
plt.show()

運行結果如下:

6?Box-Cox歸一化

Box-Cox歸一化是一種用于變換數據的分布,使其更接近正態分布的方法。它特別適用于處理具有偏態分布的數據,能夠減少數據的偏斜性并穩定方差。Box-Cox變換是一種冪律變換,可以表示為:

其中,y 是原始數據,λ 是變換參數。

Box-Cox歸一化的關鍵步驟包括:

  1. 選擇合適的變換參數?λ。這通常通過最大化變換后數據的似然函數來實現。
  2. 應用變換公式,根據選定的?λ?對數據進行變換。

Box-Cox歸一化的優點包括:

  • 它能夠處理正值數據的偏態分布問題。
  • 它可以減少數據的偏斜性,使數據更接近正態分布。
  • 它可以穩定方差,使方差與均值無關。

示例程序將使用兩種方法實現,自定義的L2歸一化封裝函數,并使用scipy的boxcox作為第二種方法來實現歸一化。以下是具體的實現:

方法1:自定義的L2歸一化歸一化封裝函數

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 自定義Box-Cox歸一化函數
def custom_boxcox(data, lam):if lam == 0:return np.log(data)else:return (np.power(data, lam) - 1) / lam# 選擇Box-Cox變換的參數lambda,這里我們先假設為0.5(可以根據數據調整)
lambda_value = 0.5# 為每一列分別使用自定義Box-Cox歸一化函數
data_normalized_custom = pd.DataFrame()
for col_name in data.iloc[:, 7:10].columns:data_col = data[col_name] + 1  # 確保數據為正數,這里加1進行平移data_normalized_custom[col_name] = custom_boxcox(data_col, lambda_value)

方法2:?scipy庫的boxcox

from scipy import stats# 使用scipy的boxcox進行歸一化
data_normalized_scipy, lambda_selected = stats.boxcox(data.iloc[:, 7] + 1)
# 繪制原始數據和歸一化數據的對比圖
plt.figure(figsize=(14, 5))plt.subplot(1, 2, 1)
# 繪制原始數據的線條圖
for idx, col_name in enumerate(data.columns[7:10]):plt.plot(data.index, data[col_name], marker='o', linewidth=1, markersize=3)plt.title('Original Data')
plt.xlabel('Index')
plt.ylabel('Value')plt.subplot(1, 2, 2)
# 繪制自定義Box-Cox歸一化方法的數據的線條圖
for idx, col_name in enumerate(data_normalized_custom.columns):plt.plot(data.index, data_normalized_custom[col_name], linestyle='--', linewidth=1, markersize=3)# 繪制scipy Box-Cox歸一化方法的數據的線條圖
plt.plot(data.index, data_normalized_scipy, linestyle='-.', linewidth=1, markersize=3)# 添加圖例、標題和坐標軸標簽
plt.title('Box-Cox Normalization')
plt.xlabel('Index')
plt.ylabel('Normalized Value')# 顯示圖形
plt.tight_layout()
plt.show()

運行結果如下:?

7 選擇哪種歸一化

各種歸一化方法各有其特點和適用場景,以下是它們的使用場景和優缺點的對比:

歸一化方法特點
Min-Max歸一化

優點:可以指定數據變換后的范圍。

缺點:對異常值敏感,因為最大值和最小值會受其影響。

Z-score歸一化

優點:降低了異常值的影響。

缺點:數據必須有明確的均值和方差。

最大值歸一化

優點:可以處理非正態分布的數據。

缺點:對數據中的零值和負值不敏感,如果數據集中的最大值很少變化,可能導致歸一化效果不佳。

L1歸一化

優點:能夠產生稀疏表示,對異常值有一定的魯棒性。

缺點:可能導致數據的某些特征被忽略,特別是當這些特征的絕對值較小時。

L2歸一化

優點:考慮了特征的相對大小,有助于保留數據的幾何結構,常用于距離度量和聚類算法。

缺點:對異常值敏感,計算相對復雜。

Box-Cox歸一化

優點:可以處理正值數據的偏態分布,通過變換參數λ調整,可以找到最佳的數據分布。

缺點:需要選擇合適的λ值,這可能需要多次嘗試,對數據中的零值或負值不適用。

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

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

相關文章

考研生活day1--王道課后習題2.2.1、2.2.2、2.2.3

2.2.1 題目描述: 解題思路: 這是最基礎的操作,思路大家應該都有,缺少的應該是如何下筆,很多同學都是有思路但是不知道如何下筆,這時候看思路的意義不大,可以直接看答案怎么寫,最好…

Java項目:基于SSM框架實現的游戲攻略網站系統分前后臺【ssm+B/S架構+源碼+數據庫+畢業論文+任務書】

一、項目簡介 本項目是一套基于SSM框架實現的游戲攻略網站系統 包含:項目源碼、數據庫腳本等,該項目附帶全部源碼可作為畢設使用。 項目都經過嚴格調試,eclipse或者idea 確保可以運行! 該系統功能完善、界面美觀、操作簡單、功能…

redhat7.x 升級openssh至openssh-9.8p1

1.環境準備: OS系統:redhat 7.4 2.備份配置文件: cp -rf /etc/ssh /etc/ssh.bak cp -rf /usr/bin/openssl /usr/bin/openssl.bak cp -rf /etc/pam.d /etc/pam.d.bak cp -rf /usr/lib/systemd/system /usr/lib/systemd/system.bak 3.安裝…

UB9A0全系統全頻高精度板卡性能指標

UB9A0 板卡是基于和芯星通自主研發的新一代射頻基帶及高精度算法一體化 GNSS SoC 芯片—Nebulas Ⅳ開發的全系統全頻點高精 OEM 板卡 ,支持 BDS,GPS, GLONASS,Galileo,QZSS,NavIC,SBAS&#xff…

linux c 應用編程定時器函數

在 Linux C 應用編程中,對于多線程編程中的定時器函數使用,通常可以借助 pthread 庫和系統提供的定時器相關的函數來實現。 首先,常見的定時器函數有 setitimer() 和 alarm() 。setitimer() 函數可以更精確地設置定時器,它可以設…

JAVA學習-練習試用Java實現“螺旋矩陣 II”

問題: 給定一個正整數 n ,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix 。 示例 1: 輸入:n 3 輸出:[[1,2,3],[8,9,4],[7,6,5]] 示例 2: 輸入&…

C++標準模板(STL)- 迭代器庫 - 流迭代器- 寫入 std::basic_streambuf 的輸出迭代器(二)

迭代器庫-流迭代器 迭代器庫提供了五種迭代器的定義,同時還提供了迭代器特征、適配器及相關的工具函數。 迭代器分類 迭代器共有五 (C17 前)六 (C17 起)種:遺留輸入迭代器 (LegacyInputIterator) 、遺留輸出迭代器 (LegacyOutputIterator) 、遺留向前迭代…

MySQL環境搭配

下載版本37滴 下載第二個 之后進行安裝 進入安裝界面 next 選擇默認的 進行下一步 安裝成功后,進行一系列配置,成功界面如下: 配置 MySQL8.0 環境變量 如果不配置 MySQL 環境變量,就不能在命令行直接輸入 MySQL 登錄命令。 步…

強烈推薦!12 組超驚艷的 Midjourney 風格提示詞!

前言 Midjourney 的 --sref random 隨機風格功能推出之后,出現了很多對不同代碼生成效果的探索。今天就為大家推薦 12 組我覺得非常驚艷的風格代碼,將它們添加在提示詞中,不需要寫復雜的關鍵詞就能得到高質量的指定風格,并且效果…

CUDA編譯配置中來自 CUDA 12.1.targets 的MSB3721錯誤和核函數調用語法錯誤‘<’解決及可用的代碼示例框架

今天開始整cuda編程處理圖像,好久沒玩cuda,又從小白開始。情況不妙,第一個工程坑不少,記錄一下如下2個重要的錯誤: (1)來自 CUDA 12.1.targets 的MSB3721錯誤 錯誤 命令““C:\Program Files\N…

Scrapy框架的基本使用教程

1、創建scrapy項目 首先在自己的跟目錄文件下執行命令: PS D:\BCprogram\python_pro\bigdata> scrapy startproject theridion_grallatorscrapy startproject 項目名 具體執行操作如下:1、創建項目目錄:Scrapy會在當前工作目錄下創建一…

Git 操作總結

1. 安裝、Git 環境配置 1.1 安裝 Git 官方版本可以在 Git 官方網站下載:打開 https://git-scm.com/download/win,選擇相應版本即可。 Git 安裝完成后,可以在開始菜單中看到 Git 的三個啟動圖標(Git Bash、Git CMD、Git GUI&…

koa導出數據為csv文件給前端下載

后端代碼 async userActivityExport(ctx) {const limit ctx.query.limit || 2const offset ctx.query.offset || 0const UserActivity ctx.module.db().entity(userActivity)const findOption {}const ret await UserActivity.findMany_(findOption)const firtCol Objec…

QT5.12環境搭建與源碼編譯

一、概述 QT版本:QT5.12.10 Qt網址:http://download.qt.io/archive/qt/ 編譯平臺 ubuntu18.04 二、安裝交叉編譯工具鏈 1、獲取交叉編譯工具鏈 一般如果是編譯系統如果有對應的gcc 就是用這個就可以了 比如rk3128 lin…

【Qt】QTableWidget設置可以選擇多行多列,并能復制選擇的內容到剪貼板

比如有一個 QTableWidget*m_tbwQuery m_tbwQuery->installEventFilter(this); //進行事件過濾處理//設置可以選擇多行多列 m_tbwQuery->setSelectionMode(QAbstractItemView::MultiSelection); m_tbwQuery->setSelectionBehavior(QAbstractItemView::SelectItems); …

字符串相似度算法完全指南:編輯、令牌與序列三類算法的全面解析與深入分析

在自然語言處理領域,人們經常需要比較字符串,這些字符串可能是單詞、句子、段落甚至是整個文檔。如何快速判斷兩個單詞或句子是否相似,或者相似度是好還是差。這類似于我們使用手機打錯一個詞,但手機會建議正確的詞來修正它&#…

如何為老化的汽車鉛酸電池充電

一項小研究表明,汽車鉛酸電池不同于深循環或固定電池。汽車電池旨在限度地提高啟動電流容量,并且對深度放電或浮充(也稱為第 3 階段充電循環)反應不佳。起動電池的極板結構使表面積化,并且電解液比重 (SG) 高于其他電池,以提供高啟…

C# 實現位比較操作

1、目標 對兩個字節進行比較,統計變化位數、一位發生變化的位數、二位發生變化的位數、多位發生變化的位數。 2、代碼 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Lin…

php 跨域問題

設置header <?php $origin isset($_SERVER[HTTP_ORIGIN])? $_SERVER[HTTP_ORIGIN]:;$allow_originarray(http://www.aaa.com,http://www.bbb.com, ); if( $origin in $allow_origin ){header("Access-Control-Allow-Origin:".$origin);header("Access-Co…

Electron Forge 打包更改打包后圖片

確認 ICO 文件有效 確保 icon.ico 文件是有效的并且包含多種分辨率的圖標&#xff08;如 16x16, 32x32, 48x48, 256x256&#xff09;。可以使用工具如 icoconverter 來生成有效的 ICO 文件。 https://icoconvert.com/確認圖標文件路徑 確保圖標文件路徑正確并且文件存在。 確…