机器学习中特征选择的指导原则

2023年11月01日 由 alex 发表 231 0

介绍


特征选择是机器学习流程中关键的一步,其目标是选择对模型性能直接影响最大的信息性属性。这是一个需谨慎考虑的复杂过程,需要一组指导原则来确保所选特征与标签相关,在推理时间之前记录,有大量的示例支持,以有意义的规模表达,并基于项目的专家见解。在本文中,我们将深入探讨每个指导原则,以突出其在特征选择过程中的重要性。


6


相关标签


特征选择的最基本导则是所选择的特征必须与标签相关,即模型试图预测的目标变量。这意味着这些特征应该对标签产生直接或间接的影响。包含不相关或无关的特征可能导致过拟合和模型性能下降。例如,在医疗诊断模型中,当预测患者的病情时,必须包括血压、体温和心率等特征,因为这些特征与诊断直接相关。


在这个例子中,我们将使用广受欢迎的鸢尾花数据集来选择与标签(花的种类)相关的特征。


import seaborn as sns
import matplotlib.pyplot as plt
# Load the Iris dataset
iris = sns.load_dataset("iris")
# Plot a pairplot to visualize the relationships between features and the label
sns.pairplot(iris, hue="species")
plt.show()


这段代码加载Iris数据集,并创建一个pairplot来可视化不同特征(花萼长度、花萼宽度、花瓣长度和花瓣宽度)与标签(物种)之间的关系。


7


在推理时间之前记录


用于模型训练的特征,以避免数据泄露。数据泄露发生在未来的信息不经意地包含在训练数据中时,这会导致训练期间模型性能的夸大,但在推理期间的泛化性能不佳。例如,在股票价格预测模型中,使用未来的股票价格作为特征将明显违反这个原则,因为在预测时并不知道未来的股票价格。


在这个例子中,我们将使用一个假设的股票价格预测数据集,确保记录的数据是在推理时间之前记录的。


import pandas as pd
from datetime import datetime, timedelta
# Create a hypothetical stock price dataset
today = datetime.today()
date_range = [today - timedelta(days=i) for i in range(30)]
stock_data = pd.DataFrame({
    'Date': date_range,
    'StockPrice': [100 + i for i in range(30)]
})
# Ensure that the dataset is sorted by date
stock_data = stock_data.sort_values('Date')
# Plot the stock prices over time
plt.plot(stock_data['Date'], stock_data['StockPrice'])
plt.xlabel('Date')
plt.ylabel('Stock Price')
plt.title('Stock Price Over Time')
plt.xticks(rotation=45)
plt.show()


这段代码创建一个假设的股票价格数据集,并确保数据按照时间顺序记录。


8


受丰富示例支持


那些受到丰富示例支持的特征更有可能成为标签的可靠指标。在机器学习中,每个特征都需要有足够数量的示例,以确保模型能学习到有意义的模式。比如,在情感分析模型中,如果一个特定的词或短语被提出作为特征,它应该在训练数据集中出现很多次,以具有重要的预测能力。


在这个例子中,我们将生成一个用于情感分析的合成数据集,确保特征有丰富的示例。


import pandas as pd
import random
# Create a synthetic sentiment analysis dataset
data = {
    'Review': ['Great product', 'Terrible experience', 'Highly recommended', 'Not worth it', 'Amazing quality'],
    'Sentiment': [1, 0, 1, 0, 1]
}
# Duplicate and add more examples to the dataset
for _ in range(100):
    data['Review'].append(random.choice(data['Review']))
    data['Sentiment'].append(random.choice(data['Sentiment']))
df = pd.DataFrame(data)
# Count the number of examples for each sentiment
sentiment_counts = df['Sentiment'].value_counts()
# Plot the distribution of sentiment labels
sns.barplot(x=sentiment_counts.index, y=sentiment_counts.values)
plt.xlabel('Sentiment Label')
plt.ylabel('Count')
plt.title('Sentiment Label Distribution')
plt.show()


这段代码生成了一个人工合成的情感分析数据集,其中包含了丰富的正向和负向情绪的示例。


9


以有意义的刻度表示特征的数值,便于模型训练和解释。这个原则确保特征是可量化和可比较的。例如,在一个汽车价格预测模型中,特征“汽车年龄”应该表示为一个数值,比如年数,而不是模糊的类别,例如“新的”或“旧的”,这些类别对模型来说缺乏有意义的刻度。


在这个例子中,我们将使用一个用于汽车价格预测的数据集,其中特征“汽车年龄”以一个有意义的刻度表示。


import pandas as pd
# Create a car price prediction dataset
data = {
    'CarAgeYears': [1, 3, 5, 7, 10],
    'Price': [30000, 25000, 20000, 15000, 10000]
}
df = pd.DataFrame(data)
# Plot car price vs. car age
plt.plot(df['CarAgeYears'], df['Price'])
plt.xlabel('Car Age (Years)')
plt.ylabel('Price ($)')
plt.title('Car Price vs. Car Age')
plt.show()


这段代码创建了一个用于汽车价格预测的数据集,其中特征“汽车年龄”以数值形式表示,单位是年。


10


根据专家观点


专家对项目的专业见解可以为特征选择提供有价值的指导。领域专家拥有领域知识,可以帮助确定相关特征并潜在地提高模型性能。例如,在气候建模项目中,气象学家可以提供关于哪些气象变量(如温度、湿度和风速)对准确预测天气模式最有意义的见解。


在这个例子中,我们将使用一个气候建模的数据集,并根据专家的观点包含特征。


import pandas as pd
# Create a climate modeling dataset with expert-recommended features
data = {
    'Temperature': [28, 29, 30, 31, 32],
    'Humidity': [55, 60, 65, 70, 75],
    'WindSpeed': [10, 12, 15, 18, 20],
    'Rainfall': [0.1, 0.0, 0.2, 0.0, 0.3],
    'WeatherCondition': ['Sunny', 'Partly Cloudy', 'Sunny', 'Clear', 'Rainy']
}
df = pd.DataFrame(data)
# You can further analyze or visualize the dataset based on expert insights.


这段代码创建一个气候模拟数据集,其中包括领域专家推荐的特征,包括温度、湿度、风速、降雨和天气条件。


11


这些Python代码示例阐明了特征选择的每个指导原则,并包含了相关的数据集和图表,以帮助你理解它们的应用。


结论


特征选择是机器学习过程中的关键步骤,它可以对模型的成功产生重大影响。在构建机器学习模型时,应将本文讨论的指导原则置于决策过程的首位,包括选择与标签相关的特征、在推理时间之前记录的特征、有丰富示例支持的特征、以具有有意义标度的数值形式表示的特征以及基于专家洞察进行选择。遵循这些原则将有助于确保所选择的特征能够带来鲁棒、准确和可解释的模型,最终促进数据驱动项目的成功。


文章来源:https://medium.com/@evertongomede/guiding-principles-for-feature-selection-in-machine-learning-47caa970511e
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消