python代码变量作业_吴恩达的机器学习作业——Python实现,一,python

这篇博客介绍了如何使用Python进行单变量线性回归。首先,通过pandas读取'ex1data1.txt'文件并展示数据。接着,定义了代价函数、梯度函数和梯度下降法来求解最优参数θ。最终,使用可视化展示预测模型与训练数据的关系。
摘要由CSDN通过智能技术生成

单变量线性回归

050a24f52da91bb0fe901c642e3aae4f.png

数据处理

读入数据

path = 'ex1data1.txt'

data = pd.read_csv(path, names=['Population', 'Profit'])

可查看数据的一些统计量

d4be94bb0b46bc6fb8c17de538db178d.png

图:数据的一些统计量

展示数据

data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))

plt.show()

51d2f5229988e9bcde3c285e19b5a989.png

图:原数据的散点图

梯度下降

代价函数

公式:

df13b1c61b199fce1f92aac7a56e6d03.png

# 计算代价函数J(θ)

def cost_function(X, y, theta):

diff = X.dot(theta.T) - y

return sum(np.power(diff, 2))/(2*m)

梯度下降法

599f79e27872231d820231a3fa59a6f7.png

对θ0和θ1求偏导

# 求偏导

def gradient_function(X, y, theta):

diff = X.dot(theta.T) - y

return diff.dot(X)/m

梯度下降

def gradient_descent(X, y, alpha):

theta = np.array((m,1))

gradient = gradient_function(X, y, theta)

while not all (abs(gradient) <= 1e-5):

theta = theta - alpha * gradient

gradient = gradient_function(X, y, theta)

return theta

找到的最佳的θ

57d406a4b5f07cae36f0d12e2b282fff.png

进行可视化

population = np.linspace(data.Population.min(), data.Population.max(), 100) # 横坐标

profit = optimal_theta[0] + (optimal_theta[1] * population) # 纵坐标

fig, ax = plt.subplots(figsize=(8, 6))

ax.plot(population, profit, 'r', label='Prediction')

ax.scatter(data['Population'], data['Profit'], label='Training data')

ax.legend(loc=4) # 4表示标签在右下角

ax.set_xlabel('Population')

ax.set_ylabel('Profit')

ax.set_title('Prediction Profit by. Population Size')

plt.show()

93db3adb35a76fe7129ede22d3e2c06a.png

源码:

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

path = 'ex1data1.txt'

data = pd.read_csv(path, names=['Population', 'Profit'])

m = len(data)

data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))

# 计算代价函数J(θ)

def cost_function(X, y, theta):

diff = X.dot(theta.T) - y

return sum(np.power(diff, 2))/(2*m)

# 求偏导

def gradient_function(X, y, theta):

diff = X.dot(theta.T) - y

return diff.dot(X)/m

# 梯度下降

def gradient_descent(X, y, alpha):

theta = np.array((m,1))

gradient = gradient_function(X, y, theta)

while not all (abs(gradient) <= 1e-5):

theta = theta - alpha * gradient

gradient = gradient_function(X, y, theta)

return theta

X = data['Population']

y = data['Profit']

X = np.vstack((pd.Series(np.ones(m)), X)).T

alpha = 0.01

optimal_theta = gradient_descent(X, y, alpha)

print('optimal_theta:', optimal_theta)

population = np.linspace(data.Population.min(), data.Population.max(), 100) # 横坐标

profit = optimal_theta[0] + (optimal_theta[1] * population) # 纵坐标

fig, ax = plt.subplots(figsize=(8, 6))

ax.plot(population, profit, 'r', label='Prediction')

ax.scatter(data['Population'], data['Profit'], label='Training data')

ax.legend(loc=4) # 4表示标签在右下角

ax.set_xlabel('Population')

ax.set_ylabel('Profit')

ax.set_title('Prediction Profit by. Population Size')

plt.show()

本人刚开始学,才疏学浅

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值