接上一篇: [[ 机器学习项目实战-能源利用率1-数据预处理 ]]
目录:
* 导入预处理数据
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as np
pd.options.mode.chained_assignment = None
pd.set_option('display.max_columns', 50)
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.rcParams['font.size'] = 24
sns.set(font_scale = 2)
train_features = pd.read_csv('data/training_features.csv')
test_features = pd.read_csv('data/testing_features.csv')
train_labels = pd.read_csv('data/training_labels.csv')
test_labels = pd.read_csv('data/testing_labels.csv')
print(train_features.shape, '\t', test_features.shape)
train_features.head(8)
(6622, 64) (2839, 64)
*.1 缺失值填充
在sklearn中,可以使用Scikit-learn Imputer
object来进行缺失值填充,对于测试集我们使用数据集中的结果来进行填充,目的在于data leakage
from sklearn.imputer import SimpleImputer
imputer = SimpleImputer(strategy = 'median')
imputer.fit(train_features)
X = imputer.transform(train_features)
X_test = imputer.transform(test_features)
print('Missing values in training features: ', np.sum(np.isnan(X)))
print('Missing values in testing features: ', np.sum(np.isnan(X_test)))
print(np.where(~np.isfinite(X)))
print(np.where(~np.isfinite(X_test)))
Missing values in training features: 0
Missing values in testing features: 0
(array([], dtype=int64), array([], dtype=int64))
(array([], dtype=int64), array([], dtype=int64))
*.2 特征归一化
from sklearn.preprocessing import MinMaxScaler # StandardScaler
minmax_scaler = MinMaxScaler()
minmax_scaler.fit(X)
X = minmax_scaler.transform(X)
X_test = minmax_scaler.transform(X_test)
y = np.array(train_labels).reshape((-1, ))
y_test = np.array(test_labels).reshape((-1, ))
四. 建立基础模型, 尝试多种算法
4.1 建立一个Baseline
在建模之前,我们得有一个最坏的打算,就是模型起码得有点作用才行。
def mae(y_true, y_pred):
return np.mean(abs(y_true - y_pred))
baseline_guess = np.