導入
通常、線形回帰は 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_