• 回归问题总结


    作者最近参加了DataFountain上的机器学习比赛——光伏电站人工智能运维大数据处理分析。比赛的大致任务是根据赛方给出的光照强度度、光伏板工作温度等影响特征下,建立回归预测模型,预估光伏电站瞬时发电量。赛方给出的数据集不大,训练集1.1MB,测试集896KB(训练集和测试集下载)。比赛的评估指标是RMSE,

    $$RMSE = sqrt{frac{sum_{i=1}^n (X_{obs, i} - X_{model, i})^2}{n}}$$

    $$score = frac{1}{1 + RMSE}$$

    本文希望根据这个比赛,实验一下各种回归算法的性能和优缺点。本文不侧重于理论,具体各个算法的原理,作者后续会慢慢补充。

    普通最小二乘法

    LinearRegression拟合一个带有系数$omega = (omega_1, …, omega_p)$的线性模型,使得数据集实际观测数据和预测数据(估计值)之间的残差平方和最小。其数学表达式为:

    $$min limits_{omega} {vertvert X omega - y vertvert _2}^2$$

    普通最小二乘的系数估计问题,其依赖于模型各项的相互独立性。当各项是相关的,且设计矩阵$X$的各列近似线性相关,那么,设计矩阵会趋向于奇异矩阵,这会导致最小二乘估计对于随机误差非常敏感,产生很大的方差。

    1
    2
    3
    clf = LinearRegression()

    cv_score = cross_val_score(clf, X_scaled, y_train, cv=5, scoring=my_scorer)

    使用StandardScaler和使用MinMaxScaler对分数影响不大,最终的得分为0.48058952612492983。

    岭回归

    Ridge回归通过对系数的大小施加惩罚来解决普通最小二乘法的一些问题。 岭系数最小化的是带罚项的残差平方和,

    $$min limits_{omega} {vertvert X omega - y vertvert _2}^2 + alpha {vertvert omega vertvert _2}^2$$

    其中, $alpha > 0$是控制系数收缩量的复杂性参数:$alpha$的值越大,收缩量越大,这样系数对共线性的鲁棒性也更强。

    1
    2
    大专栏  回归问题总结lass="line">3
    4
    5
    clf = Ridge(alpha=1)

    X_minmax = MinMaxScaler().fit_transform(X_train)

    cv_score = cross_val_score(clf, X_minmax, y_train, cv=5, scoring=my_scorer)

    使用StandardScaler的分数为0.4845265337839891,使用MinMaxScaler分数可以达到0.6795703625485946。

    多项式回归

    机器学习中一种常见的模式,是使用线性模型训练数据的非线性函数。这种方法保持了一般快速的线性方法的性能,同时允许它们适应更广泛的数据范围。

    例如,可以通过构造系数的polynomial features来扩展一个简单的线性回归。在标准线性回归的情况下,你可能有一个类似于二维数据的模型:

    $$hat{y} (omega, x) = omega_0 + omega_1 x_1 + omega_2 x_2$$

    如果我们想把数据拟合成二次函数,我们可以结合二阶多项式的特征,使模型看起来像这样:

    $$hat{y} (omega, x) = omega_0 + omega_1 x_1 + omega_2 x_2 + omega_1 x_1 x_2 + omega_2 x_1^2 + omega_2 x_2^2$$

    观察到这 还是一个线性模型 (这有时候是令人惊讶的): 看到这个,想象创造一个新的变量

    $$z = [x_1, x_2, x_1 x_2, x_1^2, x_2^2]$$

    有了这些重新标记的数据,我们可以将问题写成

    $$hat{y} (omega, x) = omega_0 + omega_1 z_1 + omega_2 z_2 + omega_1 z_3 + omega_2 z_4 + omega_2 z_5$$

    我们看到,所得的polynomial regression与我们上文所述线性模型是同一类(即关于$omega$是线性的),因此可以用同样的方法解决。通过用这些基函数建立的高维空间中的线性拟合,该模型具有灵活性,可以适应更广泛的数据范围。

    1
    2
    3
    4
    poly = PolynomialFeatures(degree=2)
    X_poly = poly.fit_transform(X_train)
    clf = LinearRegression()
    cv_score = cross_val_score(clf, X_poly, y_train, cv=5, scoring=my_scorer, n_jobs=5)

    该方法在本问题中效果不好,不过可以考虑将PolynomialFeatures用在Lightgbm等算法上。

  • 相关阅读:
    Using F2 to Rename Open Files
    Java 浅析 Thread.join()
    JDK 8
    Automata
    The Hungarian Abhorrence Principle
    Spring 与 MyBatis 的整合
    JDK 8
    面向对象设计原则汇总
    Java Error : type parameters of <T>T cannot be determined during Maven Install
    【源码拾遗】从vue-router看前端路由的两种实现
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12037730.html
Copyright © 2020-2023  润新知