PEMS-SF数据集中的matlab文件在处理该数据集方面遇到了很多问题。例如整理添加特征等特别是我们想加入天气节假日之类的静态变量在我们没有这类型csv文件时。我们应该怎么用python处理数据特征并且添加特征呢可以详细举例说明吗。
处理PEMS-SF数据集的一般步骤如下:
- 导入数据集
使用pandas库中的read_csv函数读取csv文件并将其转换为dataframe格式。例如:
import pandas as pd
df = pd.read_csv('PEMS-SF/PEMS_train.csv')
- 数据清洗
对数据进行清洗和处理,包括去除重复值、处理缺失值、处理异常值等。例如:
# 去除重复行
df = df.drop_duplicates()
# 处理缺失值
df = df.fillna(method='ffill')
# 处理异常值
df = df[df['speed'] > 0]
- 特征工程
对数据集进行特征提取和处理,包括添加新的特征、归一化、标准化、特征选择等。例如:
# 添加新特征:小时、日期、工作日/周末
df['hour'] = pd.to_datetime(df['date']).dt.hour
df['date'] = pd.to_datetime(df['date']).dt.date
df['weekday'] = pd.to_datetime(df['date']).dt.weekday
df['weekend'] = df['weekday'].apply(lambda x: 1 if x >= 5 else 0)
# 归一化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['speed', 'flow']] = scaler.fit_transform(df[['speed', 'flow']])
# 特征选择
from sklearn.feature_selection import SelectKBest, f_regression
X = df.drop(['speed'], axis=1)
y = df[['speed']]
selector = SelectKBest(score_func=f_regression, k=5)
X_new = selector.fit_transform(X, y)
- 模型训练
根据特征工程后的数据集,使用机器学习算法训练模型。例如:
# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.2, random_state=0)
# 训练模型
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
# 测试模型
y_pred = model.predict(X_test)
- 模型评估
使用评估指标评估模型的性能,例如均方误差、均方根误差、平均绝对误差等。例如:
from sklearn.metrics import mean_squared_error, mean_absolute_error
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
rmse = np.sqrt(mse)
print('MSE:', mse)
print('MAE:', mae)
print('RMSE:', rmse)
如果要添加静态变量,比如天气、节假日等,可以通过以下步骤实现:
- 导入静态数据
从其他数据源获取静态数据,比如天气数据或节假日数据,然后将其转换为dataframe格式。例如:
weather_df = pd.read_csv('weather.csv')
holiday_df = pd.read_csv('holiday.csv')
- 数据预处理
对静态数据进行预处理,包括去除重复值、处理缺失值、处理异常值等。例如:
# 去除重复行
weather_df = weather_df.drop_duplicates()
# 处理缺失值
weather_df = weather_df.fillna(method='ffill')
# 处理异常值
weather_df = weather_df[weather_df['temperature'] > -20]
- 数据合并
将静态数据和PEMS-SF数据集合并成一个新的数据集。例如:
# 将天气数据和PEMS-SF数据集合并
df = pd.merge(df, weather_df, on='date', how='left')
# 将节假日数据和PEMS-SF数据集合并
df = pd.merge(df, holiday_df, on='date', how='left')
# 处理缺失值
df = df.fillna({'holiday': 0})
- 特征工程和模型训练
根据新的数据集,进行特征工程和模型训练,步骤与上述相同。例如:
# 添加新特征:天气、节假日
df['temperature'] = scaler.fit_transform(df[['temperature']])
# 训练模型
X = df.drop(['speed'], axis=1)
y = df[['speed']]
X_new = selector.fit_transform(X, y)
X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.2, random_state=0)
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
rmse = np.sqrt(mse)
print('MSE:', mse)
print('MAE:', mae)
print('RMSE:', rmse)
以上是一个基本的处理数据特征并添加特征的流程,具体实现还需要根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/8V5 著作权归作者所有。请勿转载和采集!