機器學習筆記2

5 TfidfVectorizer TF-IDF文本特征詞的重要程度特征提取

(1) 算法

詞頻(Term Frequency, TF), 表示一個詞在當前篇文章中的重要性

逆文檔頻率(Inverse Document Frequency, IDF), 反映了詞在整個文檔集合中的稀有程度

(2) API

sklearn.feature_extraction.text.TfidfVectorizer()

構造函數關鍵字參數stop_words,表示詞特征黑名單

fit_transform函數的返回值為稀疏矩陣

(3) 示例

代碼與CountVectorizer的示例基本相同,僅僅把CountVectorizer改為TfidfVectorizer即可

示例中data是一個字符串list, list中的第一個元素就代表一篇文章.

import jieba
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
?
def cut_words(text):return " ".join(list(jieba.cut(text)))
?
data = ["教育學會會長期間,堅定支持民辦教育事業!", ?"扶持民辦,學校發展事業","事業做出重大貢獻!"]
data_new = [cut_words(v) for v in data]
?
transfer = TfidfVectorizer(stop_words=['期間', '做出',"重大貢獻"]) 
data_final = transfer.fit_transform(data_new)
?
pd.DataFrame(data_final.toarray(), columns=transfer.get_feature_names_out())

from sklearn.feature_extraction.text import CountVectorizer
transfer = CountVectorizer(stop_words=['期間', '做出',"重大貢獻"]) 
data_final = transfer.fit_transform(data_new)
?
pd.DataFrame(data_final.toarray(), columns=transfer.get_feature_names_out())

?

補充:在sklearn庫中 TF-IDF算法做了一些細節的優化

詞頻 (TF)

詞頻是指一個詞在文檔中出現的頻率。通常有兩種計算方法:

  1. 原始詞頻:一個詞在文檔中出現的次數除以文檔中總的詞數。

  2. 平滑后的詞頻:為了防止高頻詞主導向量空間,有時會對詞頻進行平滑處理,例如使用 1 + log(TF)

  3. 在 TfidfVectorizer 中,TF 默認是:直接使用一個詞在文檔中出現的次數也就是CountVectorizer的結果

逆文檔頻率 (IDF)

逆文檔頻率衡量一個詞的普遍重要性。如果一個詞在許多文檔中都出現,那么它的重要性就會降低。

IDF 的計算公式是:

IDF(t)=log?(總文檔數/{包含詞t的文檔數+1})

在 TfidfVectorizer 中,IDF 的默認計算公式是:

IDF(t)=log?({總文檔數+1}/(包含詞t的文檔數+1})+1)

在 TfidfVectorizer 中還會進行歸一化處理(采用的L2歸一化)

L2歸一化

x_1歸一化后的數據=\dfrac{x_1}{\sqrt{x_1^2+x_2^2+...x_n^2}}

x可以選擇是行或者列的數據

from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
from sklearn.preprocessing import normalize
from sklearn.preprocessing import StandardScaler
import jieba
import pandas as pd
import numpy as np
def my_cut(text):return " ".join(jieba.cut(text))
data=["教育學會會長期間,堅定支持民辦教育事業!", ?"扶持民辦,學校發展事業","事業做出重大貢獻!"]
data=[my_cut(i) for i in data]
print(data)
# print("詞頻",CountVectorizer().fit_transform(data).toarray())
transfer=TfidfVectorizer()
res=transfer.fit_transform(data)
print(pd.DataFrame(res.toarray(),columns=transfer.get_feature_names_out()))
?
?
?
?
# 手動實現tfidf向量(跟上面的api實現出一樣的效果)
def tfidf(data):# 計算詞頻count = CountVectorizer().fit_transform(data).toarray()print("count",count)print(np.sum(count != 0, axis=0))# 計算IDF,并采用平滑處理idf = np.log((len(data) + 1) / (1 + np.sum(count != 0, axis=0))) + 1# 計算TF-IDFtf_idf = count * idf# L2標準化tf_idf_normalized = normalize(tf_idf, norm='l2', axis=1)#axis=0是列  axis=1是行return tf_idf,tf_idf_normalized
tf_idf,tf_idf_normalized=tfidf(data)
print(pd.DataFrame(tf_idf,columns=transfer.get_feature_names_out()))
print(pd.DataFrame(tf_idf_normalized,columns=transfer.get_feature_names_out()))

6 無量綱化-預處理

無量綱,即沒有單位的數據

無量綱化包括"歸一化"和"標準化", 為什么要進行無量綱化呢?

這是一個男士的數據表:

編號id身高 h收入 s體重 w
11.75(米)15000(元)120(斤)
21.5(米)16000(元)140(斤)
31.6(米)20000(元)100(斤)

假設算法中需要求它們之間的歐式距離, 這里以編號1和編號2為示例:

L = \sqrt{(1.75-1.5)^2+(15000-16000)^2+(120-140)^2}

從計算上來看, 發現身高對計算結果沒有什么影響, 基本主要由收入來決定了,但是現實生活中,身高是比較重要的判斷標準. 所以需要無量綱化.

(1) MinMaxScaler 歸一化

通過對原始數據進行變換把數據映射到指定區間(默認為0-1)

<1>歸一化公式:

這里的 𝑥min 和 𝑥max 分別是每種特征中的最小值和最大值,而 𝑥是當前特征值,𝑥scaled 是歸一化后的特征值。

若要縮放到其他區間,可以使用公式:x=x*(max-min)+min;

比如 [-1, 1]的公式為:

手算過程:

<2>歸一化API

sklearn.preprocessing.MinMaxScaler(feature_range)

參數:feature_range=(0,1) 歸一化后的值域,可以自己設定

fit_transform函數歸一化的原始數據類型可以是list、DataFrame和ndarray, 不可以是稀疏矩陣

fit_transform函數的返回值為ndarray

<3>歸一化示例

示例1:原始數據類型為list

from sklearn.preprocessing import MinMaxScaler
data=[[12,22,4],[22,23,1],[11,23,9]]
#feature_range=(0, 1)表示歸一化后的值域,可以自己設定
transfer = MinMaxScaler(feature_range=(0, 1))
#data_new的類型為<class 'numpy.ndarray'>
data_new = transfer.fit_transform(data)
print(data_new)
輸出:
[[0.09090909 0. ? ? ? ? 0.375 ? ? ][1. ? ? ? ? 1. ? ? ? ? 0. ? ? ?  ][0. ? ? ? ? 1. ? ? ? ? 1. ? ? ?  ]]

示例2:原始數據類型為DataFrame

from sklearn.preprocessing import MinMaxScaler
import pandas as pd;
data=[[12,22,4],[22,23,1],[11,23,9]]
data = pd.DataFrame(data=data, index=["一","二","三"], columns=["一列","二列","三列"])
transfer = MinMaxScaler(feature_range=(0, 1))
data_new = transfer.fit_transform(data)
print(data_new)

示例3:原始數據類型為 ndarray

from sklearn.feature_extraction import DictVectorizer
from sklearn.preprocessing import MinMaxScaler
?
data = [{'city':'成都', 'age':30, 'temperature':200}, {'city':'重慶','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
transfer = DictVectorizer(sparse=False)
data = transfer.fit_transform(data) #data類型為ndarray
print(data)
?
transfer = MinMaxScaler(feature_range=(0, 1))
data = transfer.fit_transform(data)
print(data)
<4>缺點

最大值和最小值容易受到異常點影響,所以魯棒性較差。所以常使用標準化的無量鋼化

(2)normalize歸一化

API

from sklearn.preprocessing import normalize
normalize(data, norm='l2', axis=1)
#data是要歸一化的數據
#norm是使用那種歸一化:"l1"  "l2"  "max
#axis=0是列  axis=1是行
<1> L1歸一化

絕對值相加作為分母,特征值作為分子

<2> L2歸一化

平方相加作為分母,特征值作為分子

<3> max歸一化

max作為分母,特征值作為分子

(3)StandardScaler 標準化

在機器學習中,標準化是一種數據預處理技術,也稱為數據歸一化或特征縮放。它的目的是將不同特征的數值范圍縮放到統一的標準范圍,以便更好地適應一些機器學習算法,特別是那些對輸入數據的尺度敏感的算法。

<1>標準化公式

最常見的標準化方法是Z-score標準化,也稱為零均值標準化。它通過對每個特征的值減去其均值,再除以其標準差,將數據轉換為均值為0,標準差為1的分布。這可以通過以下公式計算:

其中,z是轉換后的數值,x是原始數據的值,μ是該特征的均值,σ是該特征的 標準差

<2> 標準化 API

sklearn.preprocessing.StandardScale

與MinMaxScaler一樣,原始數據類型可以是list、DataFrame和ndarray

fit_transform函數的返回值為ndarray, 歸一化后得到的數據類型都是ndarray

from sklearn.preprocessing import StandardScaler
#不能加參數feature_range=(0, 1)
transfer = StandardScaler()
data_new = transfer.fit_transform(data) #data_new的類型為ndarray
<3>標準化示例
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
# 1、獲取數據
df_data = pd.read_csv("src/dating.txt")
print(type(df_data)) #<class 'pandas.core.frame.DataFrame'>
print(df_data.shape) #(1000, 4)
# 2、實例化一個轉換器類
transfer = StandardScaler()
?
# 3、調用fit_transform
new_data = transfer.fit_transform(df_data) #把DateFrame數據進行歸一化
print("DateFrame數據被歸一化后:\n", new_data[0:5])
?
nd_data = df_data.values #把DateFrame轉為ndarray
new_data = transfer.fit_transform(nd_data) #把ndarray數據進行歸一化
print("ndarray數據被歸一化后:\n", new_data[0:5])
?
nd_data = df_data.values.tolist() #把DateFrame轉為list
new_data = transfer.fit_transform(nd_data) #把ndarray數據進行歸一化
print("list數據被歸一化后:\n", new_data[0:5])
輸出:
<class 'pandas.core.frame.DataFrame'>
(1000, 4)
DateFrame數據被歸一化后:[[ 0.33193158 ?0.41660188 ?0.24523407 ?1.24115502][-0.87247784 ?0.13992897 ?1.69385734 ?0.01834219][-0.34554872 -1.20667094 -0.05422437 -1.20447063][ 1.89102937 ?1.55309196 -0.81110001 -1.20447063][ 0.2145527 ?-1.15293589 -1.40400471 -1.20447063]]
ndarray數據被歸一化后:[[ 0.33193158 ?0.41660188 ?0.24523407 ?1.24115502][-0.87247784 ?0.13992897 ?1.69385734 ?0.01834219][-0.34554872 -1.20667094 -0.05422437 -1.20447063][ 1.89102937 ?1.55309196 -0.81110001 -1.20447063][ 0.2145527 ?-1.15293589 -1.40400471 -1.20447063]]
list數據被歸一化后:[[ 0.33193158 ?0.41660188 ?0.24523407 ?1.24115502][-0.87247784 ?0.13992897 ?1.69385734 ?0.01834219][-0.34554872 -1.20667094 -0.05422437 -1.20447063][ 1.89102937 ?1.55309196 -0.81110001 -1.20447063][ 0.2145527 ?-1.15293589 -1.40400471 -1.20447063]]

自己實現標準化來測試

#數據
data=np.array([[5],[20],[40],[80],[100]])
#API實現標準化
data_news=scaler.fit_transform(data)
print("API實現:\n",data_news)
?
#標準化自己實現
mu=np.mean(data)
sum=0
for i in data:sum+=((i[0]-mu)**2)
d=np.sqrt(sum/(len(data)))
print("自己實現:\n",(data[3]-mu)/d)
<4> 注意點

在數據預處理中,特別是使用如StandardScaler這樣的數據轉換器時,fitfit_transformtransform這三個方法的使用是至關重要的,它們各自有不同的作用:

  1. fit:

    • 這個方法用來計算數據的統計信息,比如均值和標準差(在StandardScaler的情況下)。這些統計信息隨后會被用于數據的標準化。

    • 你應當僅在訓練集上使用fit方法。

  2. fit_transform:

    • 這個方法相當于先調用fit再調用transform,但是它在內部執行得更高效。

    • 它同樣應當僅在訓練集上使用,它會計算訓練集的統計信息并立即應用到該訓練集上。

  3. transform:

    • 這個方法使用已經通過fit方法計算出的統計信息來轉換數據。

    • 它可以應用于任何數據集,包括訓練集、驗證集或測試集,但是應用時使用的統計信息必須來自于訓練集。

當你在預處理數據時,首先需要在訓練集X_train上使用fit_transform,這樣做可以一次性完成統計信息的計算和數據的標準化。這是因為我們需要確保模型是基于訓練數據的統計信息進行學習的,而不是整個數據集的統計信息。

一旦scaler對象在X_train上被fit,它就已經知道了如何將數據標準化。這時,對于測試集X_test,我們只需要使用transform方法,因為我們不希望在測試集上重新計算任何統計信息,也不希望測試集的信息影響到訓練過程。如果我們對X_test也使用fit_transform,測試集的信息就可能會影響到訓練過程。

7 特征降維

實際數據中,有時候特征很多,會增加計算量,降維就是去掉一些特征,或者轉化多個特征為少量個特征

特征降維其目的:是減少數據集的維度,同時盡可能保留數據的重要信息。

特征降維的好處:

減少計算成本:在高維空間中處理數據可能非常耗時且計算密集。降維可以簡化模型,降低訓練時間和資源需求。

去除噪聲:高維數據可能包含許多無關或冗余特征,這些特征可能引入噪聲并導致過擬合。降維可以幫助去除這些不必要的特征。

特征降維的方式:

  • 特征選擇

    • 從原始特征集中挑選出最相關的特征

  • 主成份分析(PCA)

    • 主成分分析就是把之前的特征通過一系列數學計算,形成新的特征,新的特征數量會小于之前特征數量

1 .特征選擇

(a) VarianceThreshold 低方差過濾特征選擇
  • Filter(過濾式): 主要探究特征本身特點, 特征與特征、特征與目標 值之間關聯

    • 方差選擇法: 低方差特征過濾

      如果一個特征的方差很小,說明這個特征的值在樣本中幾乎相同或變化不大,包含的信息量很少,模型很難通過該特征區分不同的對象,比如區分甜瓜子和咸瓜子還是蒜香瓜子,如果有一個特征是長度,這個特征相差不大可以去掉。

      1. 計算方差:對于每個特征,計算其在訓練集中的方差(每個樣本值與均值之差的平方,在求平均)。

      2. 設定閾值:選擇一個方差閾值,任何低于這個閾值的特征都將被視為低方差特征。

      3. 過濾特征:移除所有方差低于設定閾值的特征

創建對象,準備把方差為等于小于2的去掉,threshold的缺省值為2.0
sklearn.feature_selection.VarianceThreshold(threshold=2.0)
?
把x中低方差特征去掉, x的類型可以是DataFrame、ndarray和list
VananceThreshold.fit_transform(x)
fit_transform函數的返回值為ndarray
from sklearn.feature_selection import VarianceThreshold
import pandas as pd
def variance_demo():# 1、獲取數據,data是一個DataFrame,可以是讀取的csv文件data=pd.DataFrame([[10,1],[11,3],[11,1],[11,5],[11,9],[11,3],[11,2],[11,6]])print("data:\n", data) ? # 2、實例化一個轉換器類transfer = VarianceThreshold(threshold=1)#0.1閾值# 3、調用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n",data_new)return None
variance_demo()
(b) 根據相關系數的特征選擇

<1>理論

正相關性(Positive Correlation)是指兩個變量之間的一種統計關系,其中一個變量的增加通常伴隨著另一個變量的增加,反之亦然。在正相關的關系中,兩個變量的變化趨勢是同向的。當我們說兩個變量正相關時,意味著:

  • 如果第一個變量增加,第二個變量也有很大的概率會增加。

  • 同樣,如果第一個變量減少,第二個變量也很可能會減少。

正相關性并不意味著一個變量的變化直接引起了另一個變量的變化,它僅僅指出了兩個變量之間存在的一種統計上的關聯性。這種關聯性可以是因果關系,也可以是由第三個未觀察到的變量引起的,或者是純屬巧合。

在數學上,正相關性通常用正值的相關系數來表示,這個值介于0和1之間。當相關系數等于1時,表示兩個變量之間存在完美的正相關關系,即一個變量的值可以完全由另一個變量的值預測。

舉個例子,假設我們觀察到在一定范圍內,一個人的身高與其體重呈正相關,這意味著在一般情況下,身高較高的人體重也會較重。但這并不意味著身高直接導致體重增加,而是可能由于營養、遺傳、生活方式等因素共同作用的結果。

負相關性(Negative Correlation)與正相關性剛好相反,但是也說明相關,比如運動頻率和BMI體重指數程負相關

不相關指兩者的相關性很小,一個變量變化不會引起另外的變量變化,只是沒有線性關系. 比如飯量和智商

皮爾遜相關系數(Pearson correlation coefficient)是一種度量兩個變量之間線性相關性的統計量。它提供了兩個變量間關系的方向(正相關或負相關)和強度的信息。皮爾遜相關系數的取值范圍是 [?1,1],其中:

  • \rho=1 表示完全正相關,即隨著一個變量的增加,另一個變量也線性增加。

  • \rho=-1表示完全負相關,即隨著一個變量的增加,另一個變量線性減少。

  • \rho=0 表示兩個變量之間不存在線性關系。

相關系數$\rho$的絕對值為0-1之間,絕對值越大,表示越相關,當兩特征完全相關時,兩特征的值表示的向量是

在同一條直線上,當兩特征的相關系數絕對值很小時,兩特征值表示的向量接近在同一條直線上。當相關系值為負數時,表示負相關

<2>皮爾遜相關系數:pearsonr相關系數計算公式, 該公式出自于概率論

對于兩組數據 𝑋={𝑥1,𝑥2,...,𝑥𝑛} 和 𝑌={𝑦1,𝑦2,...,𝑦𝑛},皮爾遜相關系數可以用以下公式計算:

\rho=\frac{\operatorname{Cos}(x, y)}{\sqrt{D x} \cdot \sqrt{D y}}=\frac{E[(x-E x)(y-E y)]}{\sqrt{D x} \cdot \sqrt{D y}}=\frac{\sum{i=1}^{n}(x-\tilde{x})(y-\bar{y}) /(n-1)}{\sqrt{\sum{i=1}^{n}(x-\bar{x})^{2} /(n-1)} \cdot \sqrt{\sum{i=1}^{n}(y-\bar{y})^{2} /(n-1)}}

\bar{x}\bar{y}分別是𝑋和𝑌的平均值

|ρ|<0.4為低度相關; 0.4<=|ρ|<0.7為顯著相關; 0.7<=|ρ|<1為高度相關

<3>api:

scipy.stats.personr(x, y) 計算兩特征之間的相關性

返回對象有兩個屬性:

statistic皮爾遜相關系數[-1,1]

pvalue零假設(了解),統計上評估兩個變量之間的相關性,越小越相關

<4>示例:

from scipy.stats import pearsonr
def association_demo():# 1、獲取數據data = pd.read_csv("src/factor_returns.csv")data = data.iloc[:, 1:-2]# 計算某兩個變量之間的相關系數r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])print(r1.statistic) #-0.0043893227799362555 相關性, 負數表示負相關,正數表示正相關print(r1.pvalue) #0.8327205496590723 ? ? ?  相關性,越小越相關r2 = pearsonr(data['revenue'], data['total_expense'])print(r2) #PearsonRResult(statistic=0.9958450413136111, pvalue=0.0)return None
association_demo()
 

開發中一般不使用求相關系數的方法,一般使用主成分分析,因為主成分分樣過程中就包括了求相關系數了。

2.主成份分析(PCA)

PCA的核心目標是從原始特征空間中找到一個新的坐標系統,使得數據在新坐標軸上的投影能夠最大程度地保留數據的方差,同時減少數據的維度。

(a) 原理

x_0投影到L的大小為x_0*cos \alpha

y_0投影到L的大小為y_0*sin\alpha

使用(x_0,y_0)表示一個點, 表明該點有兩個特征, 而映射到L上有一個特征就可以表示這個點了。這就達到了降維的功能 。

投影到L上的值就是降維后保留的信息,投影到與L垂直的軸上的值就是丟失的信息。保留信息/原始信息=信息保留的比例

下圖中紅線上點與點的距離是最大的,所以在紅色線上點的方差最大,粉紅線上的剛好相反.

所以紅色線上點來表示之前點的信息損失是最小的。

(b) 步驟
  • 得到矩陣

  • 用矩陣P對原始數據進行線性變換,得到新的數據矩陣Z,每一列就是一個主成分, 如下圖就是把10維降成了2維,得到了兩個主成分

  • 根據主成分的方差等,確定最終保留的主成分個數, 方差大的要留下。一個特征的多個樣本的值如果都相同,則方差為0, 則說明該特征值不能區別樣本,所以該特征沒有用。

比如下圖的二維數據要降為一維數據,圖形法是把所在數據在二維坐標中以點的形式標出,然后給出一條直線,讓所有點垂直映射到直線上,該直線有很多,只有點到線的距離之和最小的線才能讓之前信息損失最小。

這樣之前所有的二維表示的點就全部變成一條直線上的點,從二維降成了一維。

上圖是一個從二維降到一維的示例:的原始數據為

特征1-X1特征2-X2
-1-2
-10
00
21
01

降維后新的數據為

特征3-X0
-3/√2
-1/√2
0
3/√2
-1/√2

3.api

  • from sklearn.decomposition import PCA

  • PCA(n_components=None)

    • 主成分分析

    • n_components:

      • 實參為小數時:表示降維后保留百分之多少的信息

      • 實參為整數時:表示減少到多少特征

(3)示例-n_components為小數
from sklearn.decomposition import PCA
def pca_demo():data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]# 1、實例化一個轉換器類, 降維后還要保留原始數據0.95%的信息, 最后的結果中發現由4個特征降維成2個特征了transfer = PCA(n_components=0.95)# 2、調用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new)return None
pca_demo()
輸出:
data_new:[[-3.13587302e-16  3.82970843e+00][-5.74456265e+00 -1.91485422e+00][ 5.74456265e+00 -1.91485422e+00]]
(4)示例-n_components為整數
from sklearn.decomposition import PCA
def pca_demo():data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]# 1、實例化一個轉換器類, 降維到只有3個特征transfer = PCA(n_components=3)# 2、調用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new)return None
pca_demo()
輸出:
data_new:[[-3.13587302e-16  3.82970843e+00  4.59544715e-16][-5.74456265e+00 -1.91485422e+00  4.59544715e-16][ 5.74456265e+00 -1.91485422e+00  4.59544715e-16]]

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

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

相關文章

UV 快速入門和使用案例

UV 快速入門和使用案例 作者&#xff1a;王珂 郵箱&#xff1a;49186456qq.com 文章目錄 UV 快速入門和使用案例簡介一、安裝1.1 安裝包安裝1.2 從 PyPI 安裝二、使用2.1 創建項目2.2 包管理2.3 工具2.4 Python 版本 簡介 官網&#xff1a; 項目&#xff1a; https://githu…

質控腳本來嘍

好久不更新&#xff0c;上個硬貨。腳本需提前準備宿主和rrna的bowtie2索引文件&#xff0c;原始數據的命名方式為{sample}_raw_1/2.fq.gz&#xff0c;保存有原始數據路徑的文件&#xff0c;保存樣品列表的文件。 最后打個廣告&#xff0c;歡迎畜牧學方向的研究生報考蘭州大學。…

Linux Bash | Capture Output / Recall

注&#xff1a;本文為 “Linux Bash | Capture Output / Recall” 相關文章合輯。 英文引文&#xff0c;機翻未校。 中文引文&#xff0c;略作重排。 Automatically Capture Output of the Last Command Into a Variable Using Bash 使用 Bash自動將最后一個命令的輸出捕獲到…

編程題 03-樹2 List Leaves【PAT】

文章目錄 題目輸入格式輸出格式輸入樣例輸出樣例 題解解題思路完整代碼 編程練習題目集目錄 題目 Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. 輸入格式 Each input file contains one test case. For each case, …

QT設置MySQL驅動

QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 第一步&#xff1a;下載MySQL https://dev.mysql.com/downloads/mysql/ 解壓縮下載的安裝包&#xff0c;其目錄結構如下所示&#xff1a; 第二…

ABP User Interface-Angular UI中文詳解

本系列文章主要用于對ABP User Interface-Angular UI &#xff08;Angular UI | ABP.IO Documentation&#xff09;不分的中文講解以及記錄自己在學習過程中發現的容易出錯的地方。 1. 開發Development 2. 核心功能Core Functions 3. 通用組件Utilities 4. 自定義Customiza…

常用負載均衡技術有哪些?不同網絡層面上的網絡負載均衡技術

前言 負載均衡是一種策略&#xff0c;它能讓多臺服務器或多條鏈路共同承擔一些繁重的計算或I/O任務&#xff0c;從而以較低成本消除網絡瓶頸&#xff0c;提高網絡的靈活性和可靠性。 在系統管理員發現網絡性能不好時&#xff0c;可以通過網絡負載均衡來分配資源&#xff0c;以…

ARMV8 RK3399 u-boot TPL啟動流程分析 --crt0.S

上一篇介紹到start.S 最后一個指令是跳轉到_main, 接下來分析 __main 都做了什么 arch/arm/lib/crt0.S __main 注釋寫的很詳細&#xff0c;主要分為5步 1. 準備board_init_f的運行環境 2. 跳轉到board_init_f 3. 設置broad_init_f 申請的stack 和 GD 4. 完整u-boot 執行re…

RabbitMQ--進階篇

RabbitMQ 客戶端整合Spring Boot 添加相關的依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 編寫配置文件&#xff0c;配置RabbitMQ的服務信息 spri…

Redis--基礎知識點--27--redis緩存分類樹

在 Redis 中存儲分類樹&#xff0c;通常需要選擇合適的數據結構來表現層級關系。以下是使用 字符串&#xff08;String&#xff09; 和 哈希&#xff08;Hash&#xff09; 兩種常見方案的舉例說明&#xff0c;結合電商分類場景&#xff08;如 電子產品 > 手機 > 智能手機…

【C++】匯編角度分析棧攻擊

棧攻擊 介紹原理示例代碼匯編分析 介紹原理 核心原理是通過 緩沖區溢出&#xff08;Buffer Overflow&#xff09; 等漏洞&#xff0c;覆蓋棧上的關鍵數據&#xff08;如返回地址、函數指針&#xff09;&#xff0c;從而改變程序執行流程&#xff1b; 在 C 中&#xff0c;每個…

訪問 Docker 官方鏡像源(包括代理)全部被“重置連接”或超時

華為云輕量應用服務器&#xff08;Ubuntu 系統&#xff09; 遇到的問題是&#xff1a; &#x1f512; 訪問 Docker 官方鏡像源&#xff08;包括代理&#xff09;全部被“重置連接”或超時了&#xff0c;說明你這臺服務器的出境網絡對這些國外域名限制很嚴格&#xff0c;常見于華…

Java語言

本文來源 &#xff1a; 騰訊元寶 Java是一種面向對象、跨平臺的高級編程語言&#xff0c;最初由Sun Microsystems&#xff08;現為Oracle公司所有&#xff09;于1995年推出&#xff0c;廣泛應用于Web開發、移動應用、大數據處理、嵌入式系統等領域。以下是其核心特點和應用概述…

無償幫寫畢業論文(看不懂的可以私信博主)

以下教程教你如何利用相關網站和AI免費幫你寫一個畢業論文。畢竟畢業論文只要過就行&#xff0c;脫產學習這么多年&#xff0c;終于熬出頭了&#xff0c;完成畢設后有空就去多看看親人好友&#xff0c;祝好&#xff01; 一、找一個論文模板 廢話不多說&#xff0c;先上干貨Ov…

python打卡day26

函數、參數、變量 知識點回顧&#xff1a; 函數的定義變量作用域&#xff1a;局部變量和全局變量函數的參數類型&#xff1a;位置參數、默認參數、不定參數傳遞參數的手段&#xff1a;關鍵詞參數傳遞參數的順序&#xff1a;同時出現三種參數類型時 def function_name(parameter…

LeetCode 熱題 100 437. 路徑總和 III

LeetCode 熱題 100 | 437. 路徑總和 III 大家好&#xff0c;今天我們來解決一道經典的二叉樹問題——路徑總和 III。這道題在 LeetCode 上被標記為中等難度&#xff0c;要求計算二叉樹中節點值之和等于給定目標值 targetSum 的路徑數目。 問題描述 給定一個二叉樹的根節點 ro…

vue3學習-局部使用vue框架案例

目錄 局部使用vue框架步驟 簡單案例1 簡單案例2【 結構化賦值語法】 簡單案例3【使用模塊化開發模式】 基本數據的簡單應用&#xff0c;對象的簡單應用 數組的簡單應用 局部使用vue框架步驟 1 引用 vue框架的核心文件和 涉及ES6語法的文件 注意&#xff1a;這里文件&am…

初識Linux · IP分片

目錄 前言&#xff1a; IP分片 分片vs不分片 如何分片 分片舉例 三個字段 前言&#xff1a; 前文IP協議上和IP協議下我們已經把IP協議的報頭的大多數字段介紹了&#xff0c;唯獨有三個字段現在還有介紹&#xff0c;即16位標識&#xff0c;8位協議&#xff0c;13位片偏移…

u3d 定義列表詳細過程

層級結構 - Canvas - Scroll View - Viewport - Content (Vertical Layout Group) - Item1 (Prefab) - Item2 (Prefab) ... 詳細設置步驟 1. 創建 Canvas 2. 添加 Scroll View 組件 3. 在 Scroll View 下創建 Content 子對象 4. 添加 …

產品方法論與 AI Agent 技術的深度融合:從決策智能到價值創造

一、引言&#xff1a;智能化時代的產品范式革命 在數字化轉型的深水區&#xff0c;產品開發正經歷著從 “功能定義” 到 “體驗設計” 再到 “智能演化” 的范式躍遷。麥肯錫 2024 年報告指出&#xff0c;采用 AI 驅動產品方法論的企業&#xff0c;新品研發周期平均縮短 40%&a…