机器学习终极指南:特征工程(02/2) — 第 -2 部分

这篇具有很好参考价值的文章主要介绍了机器学习终极指南:特征工程(02/2) — 第 -2 部分。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接上文:机器学习终极指南:特征工程(01/3)第一部分 

五、处理不平衡数据

        处理不平衡的数据是机器学习的一个重要方面。不平衡数据是指目标变量的分布不均匀,并且与另一个类相比,一个类的代表性不足。这可能导致模型中偏向多数类,并且模型在少数类上的表现可能很差。处理不平衡数据的一些技术是:

        1. 上采样:上采样涉及通过对现有样本进行替换重新采样,为少数类创建更多样本。这可以使用模块中的函数来完成。resamplesklearn.utils

from sklearn.utils import resample

# Upsample minority class
X_upsampled, y_upsampled = resample(X_minority, y_minority, replace=True, n_samples=len(X_majority), random_state=42)

        2. 缩减采样:缩减采样涉及从多数类中删除一些样本以平衡分布。这可以使用模块中的函数来完成。resamplesklearn.utils

from sklearn.utils import resample

# Downsample majority class
X_downsampled, y_downsampled = resample(X_majority, y_majority, replace=False, n_samples=len(X_minority), random_state=42)

机器学习终极指南:特征工程(02/2) — 第 -2 部分,机器学习,机器学习,人工智能

图 4 — 欠采样和过采样

        3. 合成少数过采样技术 (SMOTE):SMOTE 涉及基于现有样本为少数类创建合成样本。这可以使用模块中的函数来完成。SMOTEimblearn.over_sampling

from imblearn.over_sampling import SMOTE

# Use SMOTE to upsample minority class
sm = SMOTE(random_state=42)
X_resampled, y_resampled = sm.fit_resample(X, y)

        4. 类加权:类加权涉及为模型中的每个类分配一个权重以解决不平衡。这可以使用模型中的参数来完成。class_weight

from sklearn.linear_model import LogisticRegression

# Use class weighting to handle imbalance
clf = LogisticRegression(class_weight='balanced', random_state=42)
clf.fit(X_train, y_train)

        5. 异常检测:异常检测涉及识别数据中的异常值并将其删除。这可以使用模块中的函数来完成。异常检测可识别数据集中明显偏离预期或正常行为的罕见事件或观测值。对于不平衡数据,其中一个类中的观测值数量远低于另一个类,则异常检测可用于识别少数类中的罕见观测值并将其标记为异常。这有助于平衡数据集并提高机器学习模型的性能。IsolationForestsklearn.ensemble

        在不平衡数据中进行异常检测的一种常见方法是使用无监督学习技术,例如聚类,其中少数类观察根据其相似性聚类为不同的组。少数类中不属于任何这些聚类的观测值可以标记为异常。

        另一种方法是使用监督学习技术,例如单类分类,其中模型在多数类数据上训练以学习数据的正常行为。然后,明显偏离学习正常行为的少数类观察结果被标记为异常。

from sklearn.ensemble import IsolationForest

# Use anomaly detection to handle imbalance
clf = IsolationForest(random_state=42)
clf.fit(X_train)
X_train = X_train[clf.predict(X_train) == 1]
y_train = y_train[clf.predict(X_train) == 1]

        6. 成本敏感学习:成本敏感学习涉及为模型中的每种类型的错误分配不同的成本以解释不平衡。这可以使用模型中的参数来完成。sample_weight


from sklearn.tree import DecisionTreeClassifier

# Use cost-sensitive learning to handle imbalance
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train, sample_weight=class_weights)

六、偏度和峰度处理

        偏度和峰度是有助于理解数据分布的统计度量。偏度测量数据中的不对称程度,而峰度测量分布的峰值或平坦程度。

机器学习终极指南:特征工程(02/2) — 第 -2 部分,机器学习,机器学习,人工智能

图例.5 — 偏度

        偏斜的数据可能会对机器学习模型的性能产生负面影响。因此,处理数据中的偏度非常重要。以下是处理数据偏度的一些技术:

  1. 对数转换:对数转换可用于减少数据的偏度。它可以应用于正偏斜和负偏斜数据。
  2. 平方根变换:平方根变换可用于降低数据的偏度。它可以应用于正偏斜数据。
  3. Box-Cox 变换:Box-Cox 变换是一种更通用的变换方法,可以处理正偏斜和负偏斜数据。它使用参数 lambda 来确定要应用于数据的转换类型。

        下面是一些用于演示这些转换的 Python 代码:

import numpy as np
import pandas as pd
from scipy import stats

# Generate some skewed data
data = np.random.gamma(1, 10, 1000)

# Calculate skewness and kurtosis
skewness = stats.skew(data)
kurtosis = stats.kurtosis(data)

print("Skewness:", skewness)
print("Kurtosis:", kurtosis)

# Log transformation
log_data = np.log(data)
log_skewness = stats.skew(log_data)
log_kurtosis = stats.kurtosis(log_data)

print("Log Skewness:", log_skewness)
print("Log Kurtosis:", log_kurtosis)

# Square root transformation
sqrt_data = np.sqrt(data)
sqrt_skewness = stats.skew(sqrt_data)
sqrt_kurtosis = stats.kurtosis(sqrt_data)

print("Sqrt Skewness:", sqrt_skewness)
print("Sqrt Kurtosis:", sqrt_kurtosis)

# Box-Cox transformation
box_cox_data, _ = stats.boxcox(data)
box_cox_skewness = stats.skew(box_cox_data)
box_cox_kurtosis = stats.kurtosis(box_cox_data)

print("Box-Cox Skewness:", box_cox_skewness)
print("Box-Cox Kurtosis:", box_cox_kurtosis)

        可以通过应用类似于处理偏度的转换来处理峰度。处理峰度的一些技术包括:

  1. 对数转换:对数转换也可用于处理数据中的峰度。
  2. 平方变换:平方变换还可用于处理数据中的峰度。
  3. Box-Cox 变换:Box-Cox 变换还可用于处理数据中的峰度。

机器学习终极指南:特征工程(02/2) — 第 -2 部分,机器学习,机器学习,人工智能

图片.6 — 峰度

        下面是一些用于演示这些转换的 Python 代码:

import numpy as np
import pandas as pd
from scipy import stats

# Generate some data with high kurtosis
data = np.random.normal(0, 5, 1000)**3

# Calculate skewness and kurtosis
skewness = stats.skew(data)
kurtosis = stats.kurtosis(data)

print("Skewness:", skewness)
print("Kurtosis:", kurtosis)

# Log transformation
log_data = np.log(data)
log_skewness = stats.skew(log_data)
log_kurtosis = stats.kurtosis(log_data

七、处理稀有类别

        处理稀有类别是指处理数据中不经常出现的分类变量中的类别的过程。稀有类别可能会导致机器学习模型中出现问题,因为它们在数据中可能没有足够的表示来准确建模。处理稀有类别的一些技术包括:

  1. 对稀有类别进行分组: 这涉及将稀有类别分组为单个类别或几个类别。这将减少变量中的类别数并增加稀有类别的表示形式。
  2. 将稀有类别替换为更常见的类别:这涉及将稀有类别替换为变量中最常见的类别。如果稀有类别对分析不重要,则这可能有效。
  3. 带有标志的独热编码:这涉及为稀有类别创建新类别并将其标记为稀有。这允许模型以不同于其他类别的方式处理稀有类别。

以下是如何使用泰坦尼克号数据集处理稀有类别的示例:

import pandas as pd
import numpy as np

# load Titanic dataset
titanic = pd.read_csv('titanic.csv')

# view value counts of the 'Embarked' column
print(titanic['Embarked'].value_counts())

# group rare categories into a single category
titanic['Embarked'] = np.where(titanic['Embarked'].isin(['C', 'Q']), titanic['Embarked'], 'R')

# view value counts of the 'Embarked' column after grouping
print(titanic['Embarked'].value_counts())

# replace rare categories with the most common category
titanic['Embarked'] = np.where(titanic['Embarked'].isin(['C', 'Q']), titanic['Embarked'], 'S')

# view value counts of the 'Embarked' column after replacement
print(titanic['Embarked'].value_counts())

# create a new category for rare categories and flag them as rare
titanic['Embarked_R'] = np.where(titanic['Embarked'].isin(['C', 'Q']), 0, 1)

八、处理时间序列数据

        处理时间序列数据涉及多种技术,例如数据预处理、特征提取和建模。让我们来看看一些技术以及如何使用 Python 实现它们。

机器学习终极指南:特征工程(02/2) — 第 -2 部分,机器学习,机器学习,人工智能

图例.7 — 时间序列数据

        1. 数据预处理:时间序列数据通常包含可能影响模型性能的缺失值、异常值和噪声数据。因此,在训练模型之前预处理数据至关重要。数据预处理的一些常见技术包括插补、处理异常值和缩放。

        2. 特征提取:特征提取涉及从可用于建模的时间序列数据中提取相关信息。一些流行的特征提取技术包括滚动统计、傅里叶变换和小波变换。

        3. 建模:一旦数据经过预处理并提取了特征,就可以将其用于建模。一些流行的时间序列数据模型包括ARIMA:自回归积分移动平均线(ARIMA),LSTM:长短期记忆(LSTM)和Prophet。

        让我们看一个如何在 Python 中实现这些技术的示例:

# Import libraries
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from statsmodels.tsa.arima_model import ARIMA
from keras.models import Sequential
from keras.layers import LSTM, Dense

# Load time-series data
data = pd.read_csv('time_series_data.csv')

# Preprocess data
data.fillna(method='ffill', inplace=True)
data = data[(data['date'] > '2020-01-01') & (data['date'] < '2021-12-31')]
data.set_index('date', inplace=True)
scaler = StandardScaler()
data = scaler.fit_transform(data)

# Extract features
rolling_mean = data.rolling(window=7).mean()
fft = np.fft.fft(data)
wavelet = pywt.dwt(data, 'db1')

# Train ARIMA model
model = ARIMA(data, order=(1, 1, 1))
model_fit = model.fit(disp=0)
predictions = model_fit.predict(start='2022-01-01', end='2022-12-31')

# Train LSTM model
X_train, y_train = [], []
for i in range(7, len(data)):
    X_train.append(data[i-7:i, 0])
    y_train.append(data[i, 0])
X_train, y_train = np.array(X_train), np.array(y_train)

X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))

# Define the LSTM model
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))

# Compile the model
model.compile(optimizer='adam', loss='mean_squared_error')

# Fit the model to the training data
model.fit(X_train, y_train, epochs=100, batch_size=32)

九、文本预处理

        在处理文本数据时,文本预处理是特征工程中的关键步骤。目标是将原始文本转换为可用于机器学习模型的数字表示形式。以下是 Python 中一些常见的文本预处理技术:

  1. 标记化:这涉及将句子或文档分解为单独的单词或短语。NLTK 库提供了各种分词器,例如单词分词器和句子分词器。
from nltk.tokenize import word_tokenize, sent_tokenize

text = "This is a sample sentence. It contains some words."
words = word_tokenize(text)
sentences = sent_tokenize(text)

print(words)
# Output: ['This', 'is', 'a', 'sample', 'sentence', '.', 'It', 'contains', 'some', 'words', '.']

print(sentences)
# Output: ['This is a sample sentence.', 'It contains some words.']

        2.停用词删除:停用词是经常出现的不给文本添加任何含义的单词,例如“a”、“the”、“and”等。删除停用词可以提高文本处理的效率并减小数据的大小。NLTK 库提供了各种语言的停用词列表。

from nltk.corpus import stopwords

stop_words = set(stopwords.words('english'))
filtered_words = [word for word in words if word.casefold() not in stop_words]

print(filtered_words)
# Output: ['sample', 'sentence', '.', 'contains', 'words', '.']

机器学习终极指南:特征工程(02/2) — 第 -2 部分,机器学习,机器学习,人工智能

图片.8 — 文本处理

        3. 词干提取和词形还原:词干提取和词形还原是用于将单词简化为其基本形式或词根形式的技术。例如,“跑步”、“跑步者”和“跑步”可以简化为词根“跑步”。NLTK 库提供了各种词干分析器和词形还原器。

from nltk.stem import PorterStemmer, WordNetLemmatizer

stemmer = PorterStemmer()
lemmatizer = WordNetLemmatizer()

stemmed_words = [stemmer.stem(word) for word in filtered_words]
lemmatized_words = [lemmatizer.lemmatize(word) for word in filtered_words]

print(stemmed_words)
# Output: ['sampl', 'sentenc', '.', 'contain', 'word', '.']

print(lemmatized_words)
# Output: ['sample', 'sentence', '.', 'contains', 'word', '.']

        4.文本规范化:文本规范化涉及将文本转换为标准化形式,例如将所有文本转换为小写,删除标点符号,将缩写和缩略替换为其完整形式。

import re

def normalize_text(text):
    text = text.lower()
    text = re.sub(r'[^\w\s]', '', text)
    text = re.sub(r'\b(can\'t|won\'t|shouldn\'t)\b', 'not', text)
    text = re.sub(r'\b(i\'m|you\'re|he\'s|she\'s|it\'s|we\'re|they\'re)\b', 'be', text)
    return text

text = "I can't believe it's not butter!"
normalized_text = normalize_text(text)

print(normalized_text)
# Output: 'i not believe be not butter'

十、结论

        总之,特征工程是机器学习过程中的关键步骤,涉及将原始数据转换为机器学习算法可以有效使用的格式。在这篇博文中,我们介绍了特征工程的各种技术,包括特征选择和提取、编码分类变量、缩放和归一化、创建新特征、处理不平衡数据、处理偏度和峰度、处理稀有类别、处理时间序列数据、特征转换和文本预处理。

        以下是这篇文章的关键要点:文章来源地址https://www.toymoban.com/news/detail-646608.html

  1. 特征选择和提取可以使用统计方法(如 PCA、LDA 和相关分析)以及机器学习方法(如基于树的方法、包装方法和嵌入式方法)来完成。
  2. 可以使用独热编码、标签编码和计数编码等技术对分类变量进行编码。
  3. 缩放和规范化可以使用最小-最大缩放、标准缩放和可靠缩放等技术来完成。
  4. 文本预处理涉及标记化、停用词删除、词干提取和词形还原等技术。

到了这里,关于机器学习终极指南:特征工程(02/2) — 第 -2 部分的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【机器学习】特征工程 - 文本特征提取TfidfVectorizer

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 对 「文本」 进行特征提取时,一般会用 「单词」 作为特征,即特征词。

    2024年02月12日
    浏览(40)
  • 机器学习:特征工程之特征预处理

    目录 特征预处理 1、简述 2、内容 3、归一化 3.1、鲁棒性 3.2、存在的问题 4、标准化 ⭐所属专栏:人工智能 文中提到的代码如有需要可以私信我发给你😊 什么是特征预处理:scikit-learn的解释: provides several common utility functions and transformer classes to change raw feature vectors into a r

    2024年02月12日
    浏览(55)
  • 机器学习重要内容:特征工程之特征抽取

    目录 1、简介 2、⭐为什么需要特征工程 3、特征抽取 3.1、简介 3.2、特征提取主要内容 3.3、字典特征提取 3.4、\\\"one-hot\\\"编码 3.5、文本特征提取 3.5.1、英文文本 3.5.2、结巴分词 3.5.3、中文文本 3.5.4、Tf-idf ⭐所属专栏:人工智能 文中提到的代码如有需要可以私信我发给你噢😊 特

    2024年02月12日
    浏览(42)
  • python机器学习——机器学习相关概念 & 特征工程

    监督学习:输入数据有特征有标签,即有标准答案 分类:k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络 回归:线性回归、岭回归 标注:隐马尔可夫模型 (不做要求) 无监督学习:输入数据有特征无标签,即无标准答案 聚类:k-means 特征工程是将原始数据

    2024年02月11日
    浏览(51)
  • 机器学习特征工程学习笔记(一)

            机器学习特征工程是指在机器学习任务中对原始数据进行转换、提取和选择,以创建更有效、更具有表征能力的特征的过程。良好的特征工程可以显著提升模型的性能,并帮助解决数据中存在的各种问题。         以下是一些常见的机器学习特征工程技术:

    2024年02月11日
    浏览(46)
  • 机器学习基础之《特征工程(4)—特征降维》

    一、什么是特征降维 降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程 1、降维 降低维度 ndarry     维数:嵌套的层数     0维:标量,具体的数0 1 2 3...     1维:向量     2维:矩阵     3维:多个二维数组嵌套     n维:继续嵌套

    2024年02月13日
    浏览(41)
  • 机器学习——特征工程

    对于机器学习特征工程的知识,你是怎样理解“特征” 在机器学习中,特征(Feature)是指从原始数据中提取出来的、用于训练和测试机器学习模型的各种属性、变量或特点。特征可以是任何类型的数据,例如数字、文本、图像、音频等等。 特征工程是机器学习中非常重要的

    2024年02月05日
    浏览(40)
  • 机器学习 特征工程

    特征工程就是将原始数据空间映射到新的特征向量空间,使得在新的特征空间中,模型能够更好地学习数据中的规律。如果特征工程做的足够好,即使是简单的模型,也能表现出非常好的效果。而复杂的模型可以在一定程度上减少特征工程的工作量。例如,对于线性模型,我

    2023年04月19日
    浏览(36)
  • 机器学习-特征工程

    1.1 什么是特征 数值特征(连续特征)、文本特征(离散特征) 1.2 特征的种类  1.3 特征工程 特征是机器学习可疑直接使用的,模型和特征之间是一个循环过程; 实际上特征工程就是将原始数据处理成机器学习可以直接使用数据的过程; 特征工程,降噪、将特征转化为数字

    2024年02月06日
    浏览(40)
  • 机器学习7:特征工程

    在传统的软件工程中,核心是代码,然而,在机器学习项目中,重点则是特征——也就是说,开发人员优化模型的方法之一是增加和改进其输入特征。很多时候,优化特征比优化模型带来的增益要大得多。 笔者曾经参与过一个“商品推荐”的项目,在项目中,笔者发现商品的

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包