0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

机器学习算法学习之特征工程3

jf_78858299 来源:人工智能大讲堂 作者:人工智能大讲堂 2023-04-19 11:38 次阅读

处理偏度和峰度

偏度和峰度是可以帮助理解数据分布的统计量。偏度度量数据的不对称程度,而峰度度量分布的峰度或平坦程度。

图片

Fig.5 — Skewness

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

1.对数变换(Log transformation):对数变换可以用来减少数据的偏度。它可以应用于正偏态和负偏态数据。

2.平方根变换(Square root transformation):平方根变换可以用于减少数据的偏度。它可以应用于正偏态数据。

3.Box-Cox变换(Box-Cox transformation):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)

处理峰度(kurtosis)的方法可以采用类似于处理偏度的变换方法。一些处理峰度的技巧包括:

1.对数变换:对数变换也可以用于处理数据中的峰度。

2.平方变换:平方变换也可以用于处理数据中的峰度。

3.Box-Cox变换:Box-Cox变换也可以用于处理数据中的峰度。

Fig.6 — Kurtosis

下面是一些 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实现它们。

Fig.7 — Time Series Data

1.数据预处理:时间序列数据通常包含缺失值、离群值和噪声数据,这些可能会影响模型的性能。因此,在训练模型之前进行数据预处理是必要的。一些常见的数据预处理技术包括填充缺失值、处理离群值和缩放。

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

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

# 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中常用的一些文本预处理技术:

分词:将句子或文档分解为单个单词或短语。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', '.']

Fig.8 — Text Processing

3.词干提取和词形还原:词干提取和词形还原是将单词缩减为其基本或根形式的技术。例如,“running”、“runner”和“runs”可以缩减为根词“run”。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'

总结

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

以下是本文的主要要点:

1.特征选择和提取可以使用统计方法,如PCA、LDA和相关性分析,以及机器学习方法,如基于树的方法、包装方法和嵌入式方法。

2.编码分类变量可以使用诸如独热编码、标签编码和计数编码等技术。

3.缩放和归一化可以使用诸如最小-最大缩放、标准缩放和鲁棒缩放等技术。

4.文本预处理涉及技术,如分词、停用词去除、词干提取和词形还原。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    835

    浏览量

    54457
  • 机器学习
    +关注

    关注

    66

    文章

    8122

    浏览量

    130562
  • 预处理
    +关注

    关注

    0

    文章

    32

    浏览量

    10409
收藏 人收藏

    评论

    相关推荐

    机器学习算法特征工程与意义详解

    1、特征工程与意义 特征就是从数据中抽取出来的对结果预测有用的信息。 特征工程是使用专业知识背景知识和技巧处理数据,是得
    发表于 10-08 15:24 2662次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b><b class='flag-5'>算法</b>的<b class='flag-5'>特征</b><b class='flag-5'>工程</b>与意义详解

    机器算法学习比较

    转本文主要回顾下几个常用算法的适应场景及其优缺点!机器学习算法太多了,分类、回归、聚类、推荐、图像识别领域等等,要想找到一个合适算法真的不容
    发表于 09-27 10:48

    【下载】《机器学习》+《机器学习实战》

    ]目录:第一部分 分类第1章 机器学习基础  2第2章 k-近邻算法   15第3章 决策树   32第4章 基于概率论的分类方法:朴素贝叶斯   53第5章 Logistic回归  
    发表于 06-01 15:49

    贪心算法学习

    算法学习之路——贪心
    发表于 09-04 07:17

    模拟退火的算法学习

    模拟退火算法学习
    发表于 06-16 11:02

    有感FOC算法学习与实现总结

    架构3 坐标变换3.1 Clark变换3.2 Park变换3.3 Park反变换4 SVPWM5 反馈部分5.1 相电流5.2 电角度和转速6 闭环控制6.1 电流环6.2 速度环6.3 位置环写在最后基于STM32的有感FOC算法学习与实现总结1 前言Field Ori
    发表于 07-05 06:45

    机器学习简介与经典机器学习算法人才培养

    上课时间安排:2022年05月27日 — 2022年05月30日No.1 第一天一、机器学习简介与经典机器学习算法介绍什么是
    发表于 04-28 18:56

    机器学习特征工程的五个方面优点

    特征工程是用数学转换的方法将原始输入数据转换为用于机器学习模型的新特征特征
    的头像 发表于 03-15 16:57 3637次阅读

    SVPWM的原理与算法学习课件免费下载

    本文档的主要内容详细介绍的是SVPWM的原理与算法学习课件免费下载包括了:SVPWM原理,SVPWM算法,SVPWM的Matlab仿真,SVPWM的DSP实现。
    发表于 03-08 08:00 21次下载
    SVPWM的原理与<b class='flag-5'>算法学习</b>课件免费下载

    机器学习算法学习特征工程1

    特征工程机器学习过程中的关键步骤,涉及将原始数据转换为机器学习
    的头像 发表于 04-19 11:38 551次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b><b class='flag-5'>算法学习</b>之<b class='flag-5'>特征</b><b class='flag-5'>工程</b>1

    机器学习算法学习特征工程2

    特征工程机器学习过程中的关键步骤,涉及将原始数据转换为机器学习
    的头像 发表于 04-19 11:38 592次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b><b class='flag-5'>算法学习</b>之<b class='flag-5'>特征</b><b class='flag-5'>工程</b>2

    机器学习算法汇总 机器学习算法分类 机器学习算法模型

    机器学习算法汇总 机器学习算法分类 机器
    的头像 发表于 08-17 16:11 727次阅读

    机器学习算法总结 机器学习算法是什么 机器学习算法优缺点

    机器学习算法总结 机器学习算法是什么?机器
    的头像 发表于 08-17 16:11 1076次阅读

    机器学习算法入门 机器学习算法介绍 机器学习算法对比

    机器学习算法入门 机器学习算法介绍 机器
    的头像 发表于 08-17 16:27 628次阅读

    机器学习有哪些算法机器学习分类算法有哪些?机器学习预判有哪些算法

    机器学习有哪些算法机器学习分类算法有哪些?机器
    的头像 发表于 08-17 16:30 1398次阅读