数据挖掘——正规方程拟合直线

一、问题描述

假设平面上3个点: (-1.0,-1.2) , (0.0,1.0),  (1.0,2.8)。

    (1)请写出相应的正规方程。

    (2)并通过求解正规方程来计算这3个点的最佳直线拟合。

二、实验目的

      画出原始数据的散点图;

      画出拟合的直线。

三、实验内容

      1、首先对数据进行特征处理

      2、然后求出正规方程的最优解

      3、通过最优解预测数据

四、实验结果及分析

五、完整代码

机器学习GitHub:https://github.com/wanglei18/machine_learning

import numpy as np

class LinearRegression:
    def fit(self, X, y):
        self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)  #最优解
        return 
    
    def predict(self, X):           #预测
        return X.dot(self.w)

def mean_squared_error(y_true, y_pred):                 #h的均方误差
    return np.average((y_true - y_pred)**2, axis=0)     #axis = 0 按列计算
    
def r2_score(y_true, y_pred):           #R^2的决定系数
    numerator = (y_true - y_pred)**2
    denominator = (y_true - np.average(y_true, axis=0))**2
    return 1- numerator.sum(axis=0) / denominator.sum(axis=0)   #按列计算
import numpy as np
import matplotlib.pyplot as plt
import machine_learning.linear_regression.lib.linear_regression as lib

def mean_squared_error(y_true, y_pred):  # h的均方误差
    return np.average((y_true - y_pred) ** 2, axis=0)  # axis = 0 按列计算

def r2_score(y_true, y_pred):  # R^2的决定系数
    numerator = (y_true - y_pred) ** 2
    denominator = (y_true - np.average(y_true, axis=0)) ** 2
    return 1 - numerator.sum(axis=0) / denominator.sum(axis=0)  # 按列计算

def process_features(X):            #特征处理
    m,n = X.shape
    X = np.c_[np.ones((m,1)), X]    #按行连接,(1,x)
    return X

plt.figure(1)
x = np.mat([[-1.0],[0.0],[1.0]])
y = np.mat([[-1.2],[1.0],[2.8]])
plt.plot(x[:, 0], y[:, 0],"bs", ms=3)

x_train = process_features(x)

model = lib.LinearRegression()

model.fit(x_train, y)
print(model.w)

y_pred = model.predict(x_train)
plt.plot(x,y_pred)
plt.show()


 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读