机器学习入门作业

这篇博客介绍了通过Python实现吴恩达机器学习课程中的线性回归例题,包括单变量和多变量线性回归。作者首先阐述了线性回归的问题背景,然后详细讲解了数据处理、代价函数与梯度下降的实现,最后展示了数据的可视化过程,适合机器学习初学者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(准备提桶跑路?)菜鸟的进修之路。这是自己这几天的学习成果,写一篇博客记录一下,便于以后的复习。


线性回归(吴恩达机器学习例题)

吴恩达机器学习的线性回归例题分为单变量的和多变量的线性回归这两个问题。对于对想入门机器学习的新手来说,吴恩达的机器学习是一门很好的课程,强烈推荐这门课程!!!下面开始本菜鸟的学习之路介绍。

一、问题

**问题一:**假如你是一家餐厅的CEO,你正在考虑在不同的城市开一家餐厅。该连锁店已经在各个城市有了卡车,并且你已经有了来自城市的利润和人口数据。您希望使用这些数据来帮助您选择下一步要扩展到哪个城市。文件ex1data1.txt包含用于我们的线性回归问题的数据集。第一列是一个城市的人口第二列是这个城市的食品卡车的利润。利润为负值表示亏损。

**问题二:**假设你要卖房子你想知道一个好的市场价格是多少。一种方法是首先收集最近出售的房屋的信息,然后制作一个房价模型。文件ex1data2.txt包含俄勒冈州波特兰市的房价训练数据集。第一栏是房子的面积(平方英尺),第二栏是卧室数,第三栏是房子的价格。

问题一很显然是一个单变量的线性回归问题,问题二是一个多变量的线性回归问题,接下来我们将利用python来实现这两个问题。

二、单变量线性回归

1.引入的库介绍

代码如下:

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

numpy 库支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库!pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算)。Python的matplotlib是一个是做数据可视化的强大的画图库。

2.python实现流程

2.1原始数据处理

代码如下:

ex0 = pd.read_csv(r'文件路径', names=['population','profit'])
ex0.insert(0, '$x_0$', 1)  #添加一列,列名为x0

2.2读取数据及代价函数

读取数据的代码如下:

def get_dataset(filename):
    xdata = np.mat(filename.iloc[:, :-1].values)
    ydata = np.mat(filename.iloc[:, -1].values).T
    return xdata, ydata

说明,iloc[start:end],索引[开始:结束],左闭右开。例如iolc[ : ,1 : -1],取值为第二列到倒数第二列的所有行数据。

代价函数和梯度下降函数的代码实现:

#代价函数实现
def costfunction(x, y, theta):
    csf = np.power(((x @ theta) - y), 2)
    return np.sum(csf) / (2 * len(x))
#梯度下降函数
def gradientDescent(x, y, theta, alpha, iters):
    cost_list = []
    for i in range(iters):
        theta = theta - (x.T @ (x @ theta  - y)) * alpha / len(x)
        cost = costfunction(x, y, theta)
        cost_list.append(cost)
    return theta, cost_list

2.3可视化

def plotshow(filename):
    xdata, ydata = get_dataset(filename)
    fig, ax = plt.subplots(figsize=(6, 4))  # 绘出图片比例为6:4
    plt.scatter(xdata.A[:, 1], ydata.A, c='b', s=5) #xdata.A是将矩阵转化为列表,s指的是点的大小
    ax.set_xlabel('Population')
    ax.set_ylabel('Profit')
    ax.set_title('The original data Fig')
    plt.show()

scatter函数包含的参数可以有很多,这里只举例,c表示为“颜色”,marker表示为“标记”,s是指点的大小,另外linewidths等变量参数。根据数据集得到的散点图如下所示:
在这里插入图片描述
直线拟合代码:

def plotReg(filename):
    xdata, ydata = get_dataset(filename)
    fig, ax = plt.subplots(figsize=(6, 4))  # 绘出图片比例为6:4
    plt.scatter(xdata.A[:, 1], ydata.A, c='b',s=5)  # xdata.A是将矩阵转化为列表,s指的是点的大小
    final_theta , cost = gradientDescent(xdata, ydata, theta, alpha, iters)
    yHat = xdata @ final_theta
    ax.set_xlabel('Population')
    ax.set_ylabel('Profit')
    ax.set_title('Predicted Profit vs. Population Size')
    plt.plot(xdata[:, 1], yHat, c='r')
    plt.show()

在这里插入图片描述
计算数值是否稳定可视化代码:

def iters_cost():
    fig, ax = plt.subplots(figsize=(8, 4))
    ax.plot(np.arange
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值