当前位置:首页 » 《关注互联网》 » 正文

吴恩达机器学习课程作业(一)基于python实现 详细解析_cc512613的博客

19 人参与  2021年06月26日 10:23  分类 : 《关注互联网》  评论

点击全文阅读


@单变量线性回归

前言

斯坦福大学吴恩达老师的机器学习课程几乎是每位热爱人工智能领域同学的必修课。网上虽然有许多基于python实现的代码,但大多使用python交互模式解释器ipython实例讲解。本人基于自己的理解采用pycharm提供源代码及个人理解,部分代码可能参考他人代码部分,如有侵权请私信我

一、问题探讨

单变量线性回归算法需要根据城市人口数量,预测开小吃店的利润
数据可以从Coursera中获得,第一列是城市人口数量,第二列是该城市小吃店利润。

二、代码解析

1.引入库

代码如下(示例):

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

numpy库,pandas库和matplotlib库分别实现了python的线性代数,数据处理及画图功能,我们以后每次人工智能算法的实现都离不开这三个模块

2.读入数据

代码如下(示例):

path ='D:\machine learning data\ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])

read_csv中的参数header指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。如果明确设定header=0 就会替换掉原来存在列名。

3.数据处理

代码如下(示例):

data.insert(0, 'Ones', 1)#在第0列插入一列,这列值全为1
clos=data.shape[1]  #shape[1]取列数,[0]取行数,clos=3
X=data.iloc[:,0:clos-1]#iloc,行全选,选01列,是前闭后开集合.X为DataFrame形式,既有行索引,也有列索引
y=data.iloc[:,clos-1:clos]#行全选,选最后一列
#print(X.head())  #验证X,y
#print(y.head())
X = np.matrix(X.values)#将X,y转化成矩阵
y = np.matrix(y.values)
theta=np.matrix([0,0]) #将theta转化成空矩阵j

注意在第0列一定要插入新的一列,这是和theta0联立的一列参数。如果没有这一列,建立的模型就只是经过原点的直线、平面等;同时matrix和array建立矩阵的不同在于:matrix只能建立一维矩阵,而array可以建立多维矩阵,但在numpy中matrix的主要优势是:相对简单的乘法运算符号。例如,a和b是两个matrices,那么a*b,就是矩阵积。而不用np.dot()

4.计算代价函数

代码如下(示例):

def computeCost(X, y, theta):#计算代价函数
    inner=np.power(((X*theta.T)-y),2)
    return np.sum(inner)/(2 * len(X))#len(X)为行数,即公式中的m
print(computeCost(X, y, theta))

在这里我们可以让电脑计算一下初始的cost,结果为32.072733877455676。同时需要注意的是theta.T表示对theta的转置,如果没有转置theta将无法得出正确结果

5.梯度下降算法计算最优解

代码如下(示例):

def gradientDescent(X, y, theta, alpha, iters):#alpha学习率,iters迭代次数
    temp = np.matrix(np.zeros(theta.shape))#一个与theta相同维度的0矩阵
    parameters=int(theta.ravel().shape[1]) #ravel()将多维降为一维
    cost = np.zeros(iters)#保存迭代之后的cost
    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] - np.sum(term)*(alpha/len(X))
        theta=temp
        cost[i]=computeCost(X, y, theta)
    return theta, cost
alpha = 0.01
iters= 1500
g,cost = gradientDescent(X, y, theta, alpha, iters)
print(g)
print(computeCost(X, y, g))#使用拟合值来计算代价函数(误差)

这里alpha和iters分别代表学习率和迭代次数。需要注意的是:np库中的multiply函数用于矩阵或数组对应位置相乘,不是传统意义上的矩阵相乘计算

6.画图

代码如下(示例):

x = np.linspace(data.Population.min(), data.Population.max(), 100) #横坐标在最大和最小之间分100份
f = g[0, 0] + (g[0, 1] * x)
fig, ax = plt.subplots(figsize=(12,8))
ax.plot(x, f, 'r', label='Prediction')
ax.scatter(data.Population, data.Profit, label='Traning Data')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()

在最后我们可以使用matplotlib.pyplot库进行画图操作。到这里如果能自己在无需他人辅助指导的情况下理解复写代码,则说明你已经基本完成作业要求了。

总结

由于自己只是大学大二小白一位,再加上自己是在宿舍自学机器学习算法,所以无法定期更新一篇文章,但后期我会尽我所能早日完成新的文章,在自己喜爱的领域越走越远!


点击全文阅读


本文链接:http://zhangshiyu.com/post/21901.html

矩阵  代码  示例  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1