python 单变量线性回归

单变量线性回归(Linear Regression with One Variable)

In [54]:

#初始化工作
import random
import numpy as np
import matplotlib.pyplot as plt

# This is a bit of magic to make matplotlib figures appear inline in the notebook
# rather than in a new window.
%matplotlib inline
plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'

# Some more magic so that the notebook will reload external python modules;
# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython
%load_ext autoreload
%autoreload 2

1、加载数据与可视化

In [55]:

print('Plotting Data ...')

def load_exdata(filename):
    data = []
    with open(filename, 'r') as f:
        for line in f.readlines(): 
            line = line.split(',')
            current = [float(item) for item in line]
            #5.5277,9.1302
            data.append(current)
    return data

data = load_exdata('ex1data1.txt');
data = np.array(data)
print(data.shape)

x = data[:, 0]; y = data[:,1]
m = data.shape[0] 
#number of training examples
plt.plot(x,y,'rx')
plt.ylabel('Profit in $10,000s');
plt.xlabel('Population of City in 10,000s');
plt.title("Training data")
Plotting Data ...
(97, 2)

Out[55]:

<matplotlib.text.Text at 0x2e663d888d0>

2、通过梯度下降求解theta

In [56]:

x = x.reshape(-1,1)
# 添加一列1
X = np.hstack([x,np.ones((x.shape[0], 1))])
theta = np.zeros((2, 1))
y = y.reshape(-1,1)

#计算损失
def computeCost(X, y, theta):
    m = y.shape[0]
    J = (np.sum((X.dot(theta) - y)**2)) / (2*m)  
    #X (m,2) theta (2,1) = m*1
    return J

#梯度下降
def gradientDescent(X, y, theta, alpha, num_iters):
    m = y.shape[0]
    # 存储历史误差
    J_history = np.zeros((num_iters, 1))
    
    for iter in range(num_iters):
        # 对J求导,得到 alpha/m * (WX - Y)*x(i),
        theta = theta - ( alpha/m) * X.T.dot(X.dot(theta) - y)
        J_history[iter] = computeCost(X, y, theta)
    return J_history,theta
    

iterations = 1500  #迭代次数
alpha = 0.01    #学习率
j = computeCost(X,y,theta)
J_history,theta = gradientDescent(X, y, theta, alpha, iterations)
print('Theta found by gradient descent: %f %f'%(theta[0][0],theta[1][0]))
plt.plot(J_history)
plt.ylabel('lost');
plt.xlabel('iter count')
Theta found by gradient descent: 1.166362 -3.630291

Out[56]:

<matplotlib.text.Text at 0x2e661194ac8>

3、训练结果可视化

In [57]:

#number of training examples
plt.plot(data[:,0],data[:,1],'rx')
plt.plot(X[:,0], X.dot(theta), '-')
plt.ylabel('Profit in $10,000s');
plt.xlabel('Population of City in 10,000s');
plt.title("Training data")

Out[57]:

<matplotlib.text.Text at 0x2e662155198>

4、可视化 J(theta_0, theta_1)

In [75]:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter

theta0_vals = np.linspace(-10, 10, 100)
theta1_vals = np.linspace(-10, 10, 100)

J_vals = np.zeros((theta0_vals.shape[0], theta1_vals.shape[0]));


# 填充J_vals
for i in range(theta0_vals.shape[0]):
    for j in range(theta1_vals.shape[0]):
        t = [theta0_vals[i],theta1_vals[j]]
        J_vals[i,j] = computeCost(X, y, t)


fig = plt.figure()
ax = fig.gca(projection='3d')

theta0_vals, theta1_vals = np.meshgrid(theta0_vals, theta1_vals)
# Plot the surface.
surf = ax.plot_surface(theta0_vals, theta1_vals, J_vals, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)

# 定制Z轴.
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%d'))

# Add a color bar which maps values to colors.
fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

In [ ]:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一棹烟波

OpenCV两种畸变校正模型源代码分析以及CUDA实现

图像算法中会经常用到摄像机的畸变校正,有必要总结分析OpenCV中畸变校正方法,其中包括普通针孔相机模型和鱼眼相机模型fisheye两种畸变校正方法。 普通相机...

4808
来自专栏图形学与OpenGL

模拟试题B

1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( )

921
来自专栏大学生计算机视觉学习DeepLearning

python实现gabor滤波器提取纹理特征 提取指静脉纹理特征 指静脉切割代码

5025
来自专栏用户2442861的专栏

kaggle示例1—研究生录取判断问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

732
来自专栏数据小魔方

机器学习笔记——哑变量处理

在机器学习的特征处理环节,免不了需要用到类别型特征,这类特征进入模型的方式与一般数值型变量有所不同。

773
来自专栏null的专栏

推荐算法——非负矩阵分解(NMF)

一、矩阵分解回顾 image.png 二、非负矩阵分解 2.1、非负矩阵分解的形式化定义 image.png 2.2、损失函数 image.png 2.3、优化...

3406
来自专栏人工智能LeadAI

卷积神经网络中PET/CT图像的纹理特征提取

Author: Zongwei Zhou 周纵苇 Weibo: @MrGiovanni Email: zongweiz@asu.edu Please cit...

3513
来自专栏素质云笔记

keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)

不得不说,这深度学习框架更新太快了尤其到了Keras2.0版本,快到Keras中文版好多都是错的,快到官方文档也有旧的没更新,前路坑太多。 到发文为...

2K5
来自专栏小鹏的专栏

根据已给字符数据,训练逻辑回归、随机森林、SVM,生成ROC和箱线图

代码下载:here。 已知训练数据如下: ? 预处理代码如下: # -*- coding: utf-8 -*- """ Created on 2017 11.1...

30310
来自专栏编程

程序猿python学习AIphaZero,TensorFlow强化学习AI游戏,100行代码运行看看!

打败世界冠军?AIphaGo Zero原理? 没错,本篇文章利用100行代码展示如何利用TensorFlow框架编写一个很简单的深度强化游戏AI核心部分,希望在...

2125

扫码关注云+社区