机器学习算法--python实现普通最小二乘线性回归模型

用普通最小二乘法(OLS)(有时也称为线性最小二乘法)估计线性回归线的参数,从而使样本点的垂直距离(残差或误差)之和最小化。

from sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('xxx\\housing.data.txt',
                 header=None,
                 sep='\s+')

df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS',
              'NOX', 'RM', 'AGE', 'DIS', 'RAD',
              'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
print(df.head())

class LinearRegressionGD(object):

    def __init__(self, eta=0.001, n_iter=20):
        self.eta = eta
        self.n_iter = n_iter

    def fit(self, X, y):
        self.w_ = np.zeros(1 + X.shape[1])
        self.cost_ = []

        for i in range(self.n_iter):
            output = self.net_input(X)
            errors = (y - output)
            self.w_[1:] += self.eta * X.T.dot(errors)
            self.w_[0] += self.eta * errors.sum()
            cost = (errors**2).sum() / 2.0
            self.cost_.append(cost)
        return self

    def net_input(self, X):
        return np.dot(X, self.w_[1:]) + self.w_[0]

    def predict(self, X):
        return self.net_input(X)

X = df[['RM']].values
y = df['MEDV'].values

sc_x = StandardScaler()
sc_y = StandardScaler()
X_std = sc_x.fit_transform(X)
# scikit-learn 的大多数转换器期望数据存储在二维阵列
y_std = sc_y.fit_transform(y[:, np.newaxis]).flatten()

lr = LinearRegressionGD()
lr.fit(X_std, y_std)

# 当使用像梯度下降的优化算法时,以训练集迭代次数作为成本函数绘制成本图,
# 来检查算法是否收敛到了最低成本
#(这里指全局性 最小成本值)确实是个不错的主意
plt.plot(range(1, lr.n_iter+1), lr.cost_)
plt.ylabel('SSE')
plt.xlabel('Epoch')
#plt.tight_layout()
#plt.savefig('images/10_05.png', dpi=300)
plt.show()

# 观察线性回归与训练数据的吻合程度
def lin_regplot(X, y, model):
    # s:指定散点图点的大小,默认为20,通过传入新的变量,实现气泡图的绘制
    # c:指定散点图点的颜色,默认为蓝色
    # edgecolors:设置散点边界线的颜色
    plt.scatter(X, y, c='steelblue', edgecolor='white', s=70)
    plt.plot(X, model.predict(X), color='black', lw=2)
    return

lin_regplot(X_std, y_std, lr)
plt.xlabel('Average number of rooms [RM] (standardized)')
plt.ylabel('Price in $1000s [MEDV] (standardized)')

#plt.savefig('images/10_06.png', dpi=300)
plt.show()

# 调用StandardScaler的inverse_transform方法,
# 把价格的预测结果恢复到以1000美元为单位的坐标轴
num_rooms_std = sc_x.transform(np.array([[5.0]]))
# 有五个房间房屋的价格
price_std = lr.predict(num_rooms_std)
print("Price in $1000s: %.3f" % sc_y.inverse_transform(price_std))

# 值得一提的是如果处理标准化变量,从技术角度来说,不需要更新截距的权重,
# 因为在这些情况下,y轴的截距总是0。可以通过打印权 重来快速确认这一点
print('Slope: %.3f' % lr.w_[1])
print('Intercept: %.3f' % lr.w_[0])

运行结果:
CRIM ZN INDUS CHAS NOX … TAX PTRATIO B LSTAT MEDV
0 0.00632 18.0 2.31 0 0.538 … 296.0 15.3 396.90 4.98 24.0
1 0.02731 0.0 7.07 0 0.469 … 242.0 17.8 396.90 9.14 21.6
2 0.02729 0.0 7.07 0 0.469 … 242.0 17.8 392.83 4.03 34.7
3 0.03237 0.0 2.18 0 0.458 … 222.0 18.7 394.63 2.94 33.4
4 0.06905 0.0 2.18 0 0.458 … 222.0 18.7 396.90 5.33 36.2

[5 rows x 14 columns]
Price in $1000s: 10.840
Slope: 0.695
Intercept: -0.000

运行结果图:
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
HCIP实验100是华为认证网络专家(Huawei Certified IP Professional)培养计划的一部分,是其可供选择的实验之一。综合实验的目的是为了让学员在真实的网络环境中应用所学知识和技能,通过解决实际问题来提升他们的专业能力。 在这项实验中,学员将面临一个综合的网络实景场景,需要通过设计、规划和操作来构建和维护一个复杂的网络架构。实验内容包括网络设备的安装调试、网络拓扑的设计与优化、网络服务的配置与管理等。 在实验过程中,学员需要通过分析业务需求,理解网络架构,制定相应的方案。在网络设备安装调试阶段,学员需要进行硬件组装、设备配置操作,并进行相关测试和调整,以确保设备正常工作。在网络拓扑设计与优化阶段,学员需要考虑网络规模、性能需求、容灾能力等因素,并利用各项技术手段进行设计和优化。在网络服务配置与管理阶段,学员需要完成各种网络服务的配置,如IP地址分配、路由协议配置、安全策略配置等。 这个实验对学员的要求非常高,在实验过程中,学员需要综合应用他们所学的各种知识和技能,如网络硬件的安装与调试、网络拓扑设计与规划、网络服务配置与管理等。同时,学员需要具备良好的沟通能力、问题解决能力和团队协作能力,以便在解决问题时能与他人有效合作。 通过完成HCIP实验100综合实验,学员将对网络架构的设计和实施有更深入的理解,提升了技术能力和实践经验,为日后从事网络相关工作打下了坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值