jupyter线性回归分析

1、简单示例函数

打开jupyter

在这里插入图片描述新建文件
在这里插入图片描述

示例函数(生成5*5对角矩阵)
在这里插入图片描述

2、单变量线性回归(数据集1)

在该部分练习中,将实现单变量线性回归并用来预测餐车的利润。

假设你是一家餐厅的领导,正在考虑在不同的城市开设新的分店。该连锁店已经在不同的城市有了餐车,并且你能够获得每个城市的人口和利润数据。

现在需要使用这些数据来帮助你选择下一个被扩展的城市。

文件ex1data1.txt包含线性回归问题的数据集。第一列数据对应城市人口,第二列数据对应那座城市的餐车的利润。利润为负时表示亏损。

2.1、添加数据集

在这里插入图片描述在这里插入图片描述

2.2、查看数据集

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os

%matplotlib inline
path = 'ex1data1.txt'
# 读入相应的数据文件
data = pd.read_csv(path, header=None,names=['Population','Profit'])
#查看数据的前五条
data.head(5)

在这里插入图片描述

2.2、实现散点图

在这里插入图片描述

2.3、梯度下降

2.3.1、更新公式

线性回归的目的是最小化成本函数:
在这里插入图片描述

假设ℎ𝜃(𝑋)由以下线性模型给出:
在这里插入图片描述

回顾一下,模型的参数是𝜃𝑗的值,这些将用来调整以最小化成本𝐽(𝜃)。其中一种方法是使用批量梯度下降算法,在批量梯度下降中,每次迭代地执行更新,随着梯度下降的每一步计算,参数𝜃𝑗越来越接近能够使得成本𝐽(𝜃)达到最低的最佳值。
在这里插入图片描述

2.3.2、计算成本

def computeCost(X, y, theta):
    inner = np.power(((X * theta.T) - y), 2)
    return np.sum(inner) / (2 * len(X))

theta = np.matrix(np.array([0,0]))
computeCost(X, y, theta)

在这里插入图片描述

2.3.3、梯度下降

#out matrix([[-3.63029144,  1.16636235]])
def gradientDescent(X, y, theta, alpha, iters):
    temp = np.matrix(np.zeros(theta.shape))
    parameters = int(theta.ravel().shape[1])
    cost = np.zeros(iters)
    for i in range(iters):
        error = (X * theta.T) - y
        for j in range(parameters):
            term = np.multiply(error, X[:,j])
            temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))
        theta = temp
        cost[i] = computeCost(X, y, theta)
    return theta, cost
g, cost = gradientDescent(X, y, theta, alpha, iterations)
g

#out 4.483388256587726
computeCost(X, y, g)

在这里插入图片描述

x = np.linspace(data.Population.min(), data.Population.max(), 100)
f = g[0, 0] + (g[0, 1] * x)
fig, ax = plt.subplots(figsize=(12,8))
ax.plot(x, f, 'b', label='Prediction')
ax.scatter(data.Population, data.Profit, c='red',label='Traning Data')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')

3在这里插入图片描述

2.4、可视化成本

fig, ax = plt.subplots(figsize=(12,8))
ax.plot(np.arange(iterations), cost, 'r')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')

在这里插入图片描述

3、多变量线性回归(数据集2)

在该部分中,将使用多个变量来实现用线性回归预测房屋价格。假设你目前正在出售房屋,想知道什么是好的市场价格。

一种方法是首先收集最近出售房屋的信息,其次是建立房屋价格模型。

文件ex1data2.txt包含俄勒冈州波特兰市的房屋价格及相关信息。第一列是房屋的大小(以平方英尺为单位),第二列是卧室的个数,第三列是房屋的价格。

3.1、特征标准化

在这里插入图片描述通过观察这些数据,可以发现房屋的大小大约是卧室数量的1000倍。而当不同的特征值之间相差几个数量级时,将特征进行缩放可以使梯度下降收敛得更快。

标准差是一种衡量特定特征的值的范围内有多大变化的方法(大多数数据点将位于平均值的两个标准差内);这是取值范围的替代方法。
当标准化特征时,需要存储用于标准化的值——平均值和标准差。从模型中学习参数后,经常需要预测新的房屋的价格。此时给定一个新的𝑥
值(房屋面积和卧室数量),必须首先使用先前从训练集中计算的平均值和标准差来对新的数据进行标准化。
在这里插入图片描述

3.2、梯度下降

3.2.1、 成本计算

data2.insert(0, 'Ones', 1)
cols = data2.shape[1]
X2 = data2.iloc[:,0:cols-1]
y2 = data2.iloc[:,cols-1:cols]
X2 = np.matrix(X2.values)
y2 = np.matrix(y2.values)
theta2 = np.matrix(np.array([0,0,0]))
g2, cost2 = gradientDescent(X2, y2, theta2, alpha, iterations)
computeCost(X2, y2, g2)

在这里插入图片描述

3.2.2、成本曲线

fig, ax = plt.subplots(figsize=(12,8))
ax.plot(np.arange(iterations), cost2, 'r')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')

在这里插入图片描述

### 实现线性回归 要在 Jupyter Notebook 中实现线性回归,需先导入必要的库并设置环境以便于数据处理和可视化。对于图形显示,在 Notebooks 的起始位置应加入 `%matplotlib inline` 命令以确保图像内嵌展示[^1]。 ```python %matplotlib inline import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression plt.style.use('./deeplearning.mplstyle') ``` 创建一些用于拟合模型的人造数据点有助于理解过程: ```python # 创建样本数据 np.random.seed(0) X = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1) # 可视化这些点 plt.scatter(X, y, color='blue', label="Data points") plt.xlabel('x') plt.ylabel('y') plt.legend() plt.show() ``` 定义并训练线性回归模型涉及实例化 `LinearRegression` 类,并调用其 `.fit()` 方法来适应输入特征矩阵 \(X\) 和目标向量 \(y\)[^2]: ```python lin_reg = LinearRegression() lin_reg.fit(X, y) print(f'Intercept: {lin_reg.intercept_}') print(f'Slope: {lin_reg.coef_}') ``` 完成上述步骤之后,可以利用此模型预测新观测值的结果。下面是一段简单的代码片段用来绘制原始数据及其对应的回归直线: ```python # 绘制最佳拟合线 plt.plot(X, lin_reg.predict(X), color='red', linewidth=2, label="Best Fit Line") plt.scatter(X, y, color='blue', label="Data Points") plt.title("Simple Linear Regression Example") plt.xlabel('Independent Variable (X)') plt.ylabel('Dependent Variable (Y)') plt.legend() plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值