線形回帰のベクトル化

導入ここに画像の説明を挿入

通常、線形回帰は for ループを介して計算する必要があり、パフォーマンスが低下します。
他の a 計算の本質は次の式で、w * v と書くことができます。

次のプロセスはベクトル化操作です。これは、2 つのベクトル w と v の間の内積として記述するだけでよく、パフォーマンスを大幅に向上させることができます。
ここに画像の説明を挿入

コード

import numpy as np

class SimpleLinearRegression:

    def __init__(self):
        self.a_ = None
        self.b_ = None

    def fit(self, x_train, y_train):
        """根据训练集x_train,y_train训练SimpleLinearRegression模型"""
        assert x_train.ndim == 1, \
            "Simple Linear Regression can not only solve single feature training data."
        assert len(x_train) == len(y_train), \
            "the size of x_train must be equal to the size of y_train"

        x_mean = np.mean(x_train)
        y_mean = np.mean(y_train)

        num = (x_train - x_mean).dot(y_train - y_mean)
        d = (x_train - x_mean).dot(x_train - x_mean)

        self.a_ = num / d
        self.b_ = y_mean - self.a * x_mean

        return self

    def predict(self, x_predict):
        """给定预测数据集x_predict,返回表示x_predict的结果向量"""
        assert x_predict.ndim == 1, \
            "Simple Linear Regression can not only solve single feature training data."
        assert self.a_ is not None and self.b_ is not None, \
            "must fit before predict!"

        return np.array(self._predict(x) for x in x_predict)

    def _predict(self, x_singel):
        """给定单个预测数据x_single,返回x_single的预测结果值"""
        return self.a_ * x_singel + self.b_

おすすめ

転載: blog.csdn.net/weixin_51711289/article/details/129727397