讯享网
来源:Deephub Imba本文约5000字,建议阅读9分钟 本文深入探讨Transformer模型中三种关键的注意力机制:自注意力、交叉注意力和因果自注意力。
讯享网
讯享网
import pandas as pd # 用于数据处理和操作import numpy as np # 用于数值计算import matplotlib.pyplot as plt # 用于数据可视化import gensim.downloader as api # 用于下载gensim提供的语料库from gensim.models import Word2Vec # 用于词嵌入from sklearn.pipeline import Pipeline # 用于构建数据处理管道from sklearn.decomposition import PCA # 用于主成分分析from sklearn.datasets import load_iris # 用于加载iris数据集from sklearn.impute import SimpleImputer # 用于数据插补from sklearn.compose import ColumnTransformer # 用于对数据集应用转换
from sklearn.feature_extraction.text import TfidfVectorizer # 用于TF-IDF实现 from sklearn.preprocessing import MinMaxScaler, StandardScaler # 用于数据缩放
-
删除包含缺失值的行或列 -
对缺失值进行插补
-
使用常数值填充(如0、1、2等) -
使用统计量填充(如均值或中位数) -
使用相邻数据值填充(如前值或后值) -
构建预测模型估计缺失值
讯享网
data = pd.DataFrame({ ‘doors’: [2, np.nan, 2, np.nan, 4], ‘topspeed’: [100, np.nan, 150, 200, np.nan], ‘model’: [‘Daihatsu’, ‘Toyota’, ‘Suzuki’, ‘BYD’,‘Wuling’] })
doors_imputer = Pipeline(steps=[ (‘imputer’, SimpleImputer(strategy=‘constant’, fill_value=4)) ])
topspeed_imputer = Pipeline(steps=[ (‘imputer’, SimpleImputer(strategy=‘median’)) ])
pipeline = ColumnTransformer( transformers=[ (‘doors_imputer’, doors_imputer, [‘doors’]), (‘topspeed_imputer’, topspeed_imputer, [‘topspeed’]) ], remainder=‘passthrough’ )
transformed = pipeline.fit_transform(data)
transformed_df = pd.DataFrame(transformed, columns=[‘doors’, ‘topspeed’, ‘model’])
-
简化数据,将连续值转换为离散类别 -
处理非线性关系 -
减少数据中的噪声和异常值
讯享网
np.random.seed(42) data = pd.DataFrame({‘age’ : np.random.randint(0, 100, 100)}) data[‘category’] = pd.cut(data[‘age’], [0, 2, 11, 18, 65, 101], labels=[‘infants’, ‘children’, ‘teenagers’, ‘adults’, ‘elders’]) print(data) print(data[‘category’].value_counts()) data[‘category’].value_counts().plot(kind=‘bar’)
讯享网
rskew_data = np.random.exponential(scale=2, size=100)
log_data = np.log(rskew_data)
plt.title(‘Right Skewed Data’) plt.hist(rskew_data, bins=10) plt.show() plt.title(‘Log Transformed Data’) plt.hist(log_data, bins=20) plt.show()
-
最小-最大缩放:将数据调整到[0, 1]区间 -
标准化:将数据调整为均值为0,标准差为1的分布
讯享网
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).reshape(-1, 1)
scaler = MinMaxScaler() minmax = scaler.fit_transform(data)
scaler = StandardScaler() standard = scaler.fit_transform(data)
df = pd.DataFrame({‘original’:data.flatten(),‘Min-Max Scaling’:minmax.flatten(),‘Standard Scaling’:standard.flatten()}) df
-
对于分类特征中的每个唯一值,创建一个新的二进制列。 -
在新创建的列中,如果原始数据中出现了相应的分类值,则标记为1,否则为0。
讯享网
data = pd.DataFrame({‘models’:[‘toyota’,‘ferrari’,‘byd’,‘lamborghini’,‘honda’,‘tesla’], ‘speed’:[‘slow’,‘fast’,‘medium’,‘fast’,‘slow’,‘medium’]}) data = pd.concat([data, pd.get_dummies(data[‘speed’], prefix=‘speed’)],axis=1) data
-
对于分类特征中的每个类别,计算对应的目标变量统计量(如均值)。 -
用计算得到的统计量替换原始的类别值。
讯享网
fruits = [‘banana’,‘apple’,‘durian’,‘durian’,‘apple’,‘banana’] price = [120,100,110,150,140,160] data = pd.DataFrame({ ‘fruit’: fruits, ‘price’: price }) data[‘encoded_fruits’] = data.groupby(‘fruit’)[‘price’].transform(‘mean’) data
-
可能导致数据泄露,特别是在不做适当的交叉验证的情况下。 -
对异常值敏感,可能需要进行额外的异常值处理。 -
在测试集中遇到训练集中未出现的类别时,需要有合适的处理策略。
-
数据标准化 -
计算协方差矩阵 -
计算协方差矩阵的特征值和特征向量 -
选择主成分 -
投影数据到新的特征空间
讯享网
iris_data = load_iris() features = iris_data.data targets = iris_data.target
features.shape # 输出: (150, 4)
pca = PCA(n_components=2) pca_features = pca.fit_transform(features)
pca_features.shape # 输出: (150, 2)
for point in set(targets): plt.scatter(pca_features[targets == point, 0], pca_features[targets == point,1], label=iris_data.target_names[point]) plt.xlabel(‘PCA Component 1’) plt.ylabel(‘PCA Component 2’) plt.title(‘PCA on Iris Dataset’) plt.legend() plt.show()
-
减少数据的维度,降低计算复杂度。 -
去除噪声和冗余信息。 -
有助于数据可视化。
-
可能导致一定程度的信息损失。 -
转换后的特征难以解释,因为每个主成分都是原始特征的线性组合。 -
仅捕捉线性关系,对于非线性关系效果可能不佳。
-
统计聚合:如平均值、中位数、最大值、最小值等。 -
时间聚合:如按天、周、月等时间单位聚合数据。 -
分组聚合:根据某些类别特征对数据进行分组,然后在每个组内进行聚合。
讯享网
quarter = [‘Q1’,‘Q2’,‘Q3’,‘Q4’] car_sales = [10000,9850,13000,20000] motorbike_sales = [14000,18000,9000,11000] sparepart_sales = [5000, 7000,3000, 10000]
data = pd.DataFrame({‘car’:car_sales, ‘motorbike’:motorbike_sales, ‘sparepart’:sparepart_sales}, index=quarter)
data[‘avg_sales’] = data[[‘car’,‘motorbike’,‘sparepart’]].mean(axis=1).astype(int) data[‘total_sales’] = data[[‘car’,‘motorbike’,‘sparepart’]].sum(axis=1).astype(int)
data
-
‘avg_sales’:每个季度不同产品的平均销售额。 -
‘total_sales’:每个季度所有产品的总销售额。
-
可以捕捉多个特征之间的关系。 -
减少特征的数量,有助于模型的解释和计算效率。 -
可能创造出更有预测力的特征。
-
聚合可能会导致一些细节信息的丢失。 -
需要领域知识来决定哪些聚合是有意义的。 -
过度聚合可能会导致过拟合。
-
词频(TF):衡量一个词在文档中出现的频率。计算公式为:TF(t,d) = (词t在文档d中出现的次数) / (文档d中的总词数) -
逆文档频率(IDF):衡量一个词在整个文档集中的普遍重要性。计算公式为:IDF(t) = log(总文档数 / 包含词t的文档数)
讯享网
texts = [“I eat rice with eggs.”, “I also love to eat fried rice. Rice is the most delicious food in the world”] vectorizer = TfidfVectorizer() tfidfmatrix = vectorizer.fit_transform(texts) features = vectorizer.get_feature_names_out() data = pd.DataFrame(tfidfmatrix.toarray(), columns=features) print(”TF-IDF matrix”) data
-
第一行代表句子 “I eat rice with eggs.” -
第二行代表句子 “I also love to eat fried rice. Rice is the most delicious food in the world”
-
能够反映词语在文档中的重要程度。 -
可以过滤掉常见词语,突出关键词。 -
计算简单,易于理解和实现。
-
没有考虑词序和语法结构。 -
对于极短文本可能效果不佳。 -
不能捕捉词语之间的语义关系。
-
Word2Vec -
GloVe (Global Vectors for Word Representation) -
FastText -
BERT (Bidirectional Encoder Representations from Transformers)
讯享网
corpus = api.load(‘text8’)model = Word2Vec(corpus)dog = model.wv[‘dog’]print(“Embedding vector for ‘dog’:\n”, dog)
讯享网
cat = model.wv[‘cat’]car = model.wv[‘car’]dogvscat = model.wv.similarity(‘dog’,‘cat’)dogvscar = model.wv.similarity(‘dog’,‘car’)print(“Similarity:”)print(“Dog vs Cat: “, dogvscat)print(“Dog vs Car: “, dogvscar)
讯享网
-
能够捕捉词语之间的语义关系。 -
可以处理高维稀疏的文本数据,将其转换为低维稠密的向量表示。 -
通过迁移学习,可以在小规模数据集上也能获得良好的表现。
-
训练高质量的嵌入模型通常需要大量的文本数据和计算资源。 -
词语的多义性可能无法被单一的静态向量完全捕捉。 -
对于特定领域的任务,可能需要在领域特定的语料上重新训练或微调嵌入模型。

关于我们
数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。

新浪微博:@数据派THU
微信视频号:数据派THU
今日头条:数据派THU
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/137969.html