Andrew Ng经典机器学习课程的Python实现(第1部分)

简介: 本文讲述了如何用Python实现Andrew Ng经典机器学习课程。

几个月前,我在Coursera(免费大型公开在线课程项目)上完成Andrew Ng机器学习的MOOC教学。对于任何一个想进入人工智能和机器学习世界的人来说,这都是一个很好的入门课程,但其中的项目是用Octave语言编写的。我一直想知道这门课如果用Python的话该有多么神奇,最终我决定重做一遍,这次用Python来完成。

在这一系列的博文中,我打算用Python编写程序。这么做有以下几个原因:

1、这会帮助那些想要Python版本课程的人;

2.、对于有些R语言爱好者来说,他们也愿意学习熟悉的那些算法的Python实现,那会受益匪浅;

基础知识

强烈建议你先看1周的视频讲座,之后就应该对Python的体系结构有基本的了解。

在这一节中,我们将研究最简单的机器学习算法。

仅有一个变量的线性回归

首先是关于场景的描述。在这里,我们将仅用一个变量来执行线性回归以预测一个食品货车的收益。假设你是一家餐厅的CEO,正在考虑在每个不同的城市开设一家分店,并且在各个城市都有货车,你可以从这些分店获得收益和顾客的相关数据。

ex1data1.txt文件包含了我们线性回归练习的数据集。第一列表示城市的人口,第二列是该城市的食品货车的收益。如果收益为负则表示亏损。

首先,与执行任何机器学习任务一样,我们需要导入一些库

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

读取数据并进行可视化

在开始任何任务之前,通过可视化数据来理解数据通常来说是非常有用的。对于这个数据集,可以利用散点图来可视化数据,然而它只有两个属性(收益和用户)。

(在现实生活中我们遇到的许多问题都是多维的,不能仅仅用二维图来表示。要创建多维的表达方式,必须要灵活地运用各种表现形式,如色彩、形状、深度等。)

data = pd.read_csv('ex1data1.txt', header = None) #read from dataset
X = data.iloc[:,0] # read first column
y = data.iloc[:,1] # read second column
m = len(y) # number of training example
data.head() # view first few rows of the data

 

4df4e10910db5dc550326658d9c578d41e0d2fc1 

这里我们使用了pandasread_csv函数来读取以逗号分隔的一组值。此外,我们还使用了head函数来查看数据的前几行。

plt.scatter(X, y)
plt.xlabel('Population of City in 10,000s')
plt.ylabel('Profit in $10,000s')
plt.show()

a887436444c69ee4331c8a1d3b548b4bcd2f171e 

添加拦截项

在下面的代码中,我们给数据添加另一个维度以适应拦截项(这么做的原因已在视频中进行了解释)。我们还将参数theta初始化为0,并把学习率alpha初始化为0.01

X = X[:,np.newaxis]
y = y[:,np.newaxis]
theta = np.zeros([2,1])
iterations = 1500
alpha = 0.01
ones = np.ones((m,1))
X = np.hstack((ones, X)) # adding the intercept term

使用np.newaxis可以将一维数组(shape: N elements)转换为行向量(shape: N rows, 1 column)或列向量(shape: 1 row, N columns)。在这里,我们将X和y重新排列到列向量里。

下一步,我们将计算成本和梯度下降,Andrew Ng在视频讲座中很好地讲解了这一操作过程。这里我仅提供Andrew Ng在讲座中使用的基于Python的伪代码。

成本计算

defcomputeCost(X, y, theta):
    temp = np.dot(X, theta) - y
    return np.sum(np.power(temp, 2)) / (2*m)

J = computeCost(X, y, theta)
print(J)

 

你应该期望看到成本的计算结果是32.07。

用梯度下降法求最优参数

defgradientDescent(X, y, theta, alpha, iterations):
    for _ in range(iterations):
        temp = np.dot(X, theta) - y
        temp = np.dot(X.T, temp)
        theta = theta - (alpha/m) * temp
    return theta

theta = gradientDescent(X, y, theta, alpha, iterations)
print(theta)

 

期望的theta的范围[-3.6303, 1.1664]

我们现在有了优化的theta值,利用上面的theta值来计算:

J = computeCost(X, y, theta)
print(J)

上面的输出应该会给你一个比32.07更好的结果:4.483。

绘制最佳拟合线图

plt.scatter(X[:,1], y)
plt.xlabel('Population of City in 10,000s')
plt.ylabel('Profit in $10,000s')
plt.plot(X[:,1], np.dot(X, theta))
plt.show()

e11d1cf5fb961106b91b4c2bb3f41eab8abd7ad6 

让我们用扩展线性回归的思路来处理多个独立的变量。

多元线性回归

情景描述:

假设你正在出售房子,你想知道近期比较好的市场价格。一个方式是首先收集最近房子买卖的信息,并创建一个房子价格模型。你的任务是基于其它的变量来预测房价:

文件ex1data2.txt包含一组俄勒冈州波特兰市的房子价格数据。第一列是房子的面积,第二列是卧室的数量,第三列是房子的价格。

在前一节中你已经创建了必要的基础环境,这些基础环境也可以很方便地应用在本节中。在这里,将使用我们在上一节中所给的公式进行计算。

Import numpy as np
import pandas as pd

data = pd.read_csv('ex1data2.txt', sep = ',', header = None)
X = data.iloc[:,0:2] # read first two columns into X
y = data.iloc[:,2] # read the third column into y
m = len(y) # no. of training samples
data.head()

0716ec3fad00d3febd00949929e53ecde0d00fbc 

正如在上面看到的那样,我们正在处理的不止是一个独立变量(你在前一节中所学习的概念也适用于这里)。

特征标准化

通过观察这些数据,我们注意到房子的面积大约是卧室数量的1000倍。当特征量级不同的时候,首先执行特征比例缩放操作可以使梯度下降收敛地更快。

我们的任务是:

· 从数据集中减去每个特征的平均值;

·  减去平均值之后,再按各自的“标准偏差”缩放(分配)特征值;

X = (X - np.mean(X))/np.std(X)

增加拦截项和初始化参数

ones = np.ones((m,1))
X = np.hstack((ones, X))
alpha = 0.01
num_iters = 400
theta = np.zeros((3,1))
y = y[:,np.newaxis]

成本计算

defcomputeCostMulti(X, y, theta):
    temp = np.dot(X, theta) - y
    return np.sum(np.power(temp, 2)) / (2*m)
J = computeCostMulti(X, y, theta)
print(J)

你应该期望看到一个输出的成本是65591548106.45744

用梯度下降法求最优参数

defgradientDescentMulti(X, y, theta, alpha, iterations):
    m = len(y)
    for _ in range(iterations):
        temp = np.dot(X, theta) - y
        temp = np.dot(X.T, temp)
        theta = theta - (alpha/m) * temp
    return theta
theta = gradientDescentMulti(X, y, theta, alpha, num_iters)
print(theta)

你的最优参数应该是 [[334302.06399328],[ 99411.44947359], [3267.01285407]]

我们现在有了优化过的theta值,使用上面输出的theta值。

J = computeCostMulti(X, y, theta)
print(J)

这应该会输出一个比65591548106.45744好很多的值:2105448288.6292474

现在你已经学会如何用一个或多个独立变量执行线性回归了。

数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《Python Implementation of Andrew Ng’s Machine Learning Course (Part1)》

作者:Srikar

译者:奥特曼,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

相关文章
|
1天前
|
机器学习/深度学习 人工智能 TensorFlow
机器学习项目实战:使用Python实现图像识别
在AI时代,Python借助TensorFlow和Keras实现图像识别,尤其在监控、驾驶、医疗等领域有广泛应用。本文通过构建CNN模型识别MNIST手写数字,展示图像识别流程:安装库→加载预处理数据→构建模型→训练→评估。简单项目为深度学习入门提供基础,为进一步探索复杂场景打下基础。
11 5
|
3天前
|
机器学习/深度学习 算法 Python
介绍文本分类的基本概念、常用方法以及如何在Python中使用机器学习库进行文本分类
【6月更文挑战第13天】文本分类是机器学习在数字化时代的关键应用,涉及文本预处理、特征提取和模型训练等步骤。常见方法包括基于规则、关键词和机器学习,其中机器学习(如朴素贝叶斯、SVM、深度学习)是主流。在Python中,可使用scikit-learn进行文本分类,例如通过TF-IDF和朴素贝叶斯对新闻数据集进行处理和预测。随着技术发展,未来将深入探索深度学习和多模态数据在文本分类中的应用。
8 2
|
3天前
|
机器学习/深度学习 边缘计算 TensorFlow
Python机器学习工具与库的现状,并展望其未来的发展趋势
【6月更文挑战第13天】本文探讨了Python在机器学习中的核心地位,重点介绍了Scikit-learn、TensorFlow、PyTorch等主流库的现状。未来发展趋势包括自动化、智能化的工具,增强可解释性和可信赖性的模型,跨领域融合创新,以及云端与边缘计算的结合。这些进展将降低机器学习门槛,推动技术在各领域的广泛应用。
9 3
|
4天前
|
机器学习/深度学习 算法 数据挖掘
机器学习新手也能飞:Python+Scikit-learn让你轻松入门!
【6月更文挑战第12天】Python和Scikit-learn降低了机器学习的门槛,让初学者也能轻松涉足。Python以其易用性及丰富的库支持成为机器学习首选语言,而Scikit-learn作为开源机器学习库,提供多种算法和工具。通过简单示例展示了如何使用两者处理鸢尾花数据集进行分类,体现其在实践中的高效便捷。掌握这两者,能助你在机器学习领域不断探索和创新。
|
6天前
|
机器学习/深度学习 数据采集 TensorFlow
【机器学习】Python与深度学习的完美结合——深度学习在医学影像诊断中的惊人表现
【6月更文挑战第10天】Python和深度学习驱动的医学影像诊断正在革新医疗行业。借助TensorFlow等库,开发人员能轻松构建CNN等模型,自动提取影像特征,提升疾病诊断准确性。已在肿瘤检测等领域取得显著成果,但也面临数据质量和模型解释性等挑战。随着技术进步,深度学习有望在医学影像诊断中发挥更大作用。
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
炸裂!PAI-DSW 和 Free Prompt Editing 图像编辑算法,成就了超神的个人 AIGC 绘图小助理!
【6月更文挑战第11天】PAI-DSW 和 Free Prompt Editing 算法引领图像编辑革命,创造出个人AIGC绘图小助理。PAI-DSW擅长深度图像处理,通过复杂模型和深度学习精准编辑;Free Prompt Editing则允许用户以文本描述编辑图像,拓展编辑创意。结合两者,小助理能根据用户需求生成惊艳图像。简单Python代码示例展示了其魅力,打破传统编辑局限,为专业人士和普通用户提供创新工具,开启图像创作新篇章。未来,它将继续进化,带来更多精彩作品和体验。
|
17天前
|
机器学习/深度学习 算法 TensorFlow
机器学习算法简介:从线性回归到深度学习
【5月更文挑战第30天】本文概述了6种基本机器学习算法:线性回归、逻辑回归、决策树、支持向量机、随机森林和深度学习。通过Python示例代码展示了如何使用Scikit-learn、statsmodels、TensorFlow库进行实现。这些算法在不同场景下各有优势,如线性回归处理连续值,逻辑回归用于二分类,决策树适用于规则提取,支持向量机最大化类别间隔,随机森林集成多个决策树提升性能,而深度学习利用神经网络解决复杂模式识别问题。理解并选择合适算法对提升模型效果至关重要。
185 4
|
1天前
|
机器学习/深度学习 数据采集 监控
算法金 | 选择最佳机器学习模型的 10 步指南
许多刚入门的学习者也面临着相似的挑战,特别是在项目启动初期的方向确定和结构规划上。本文意在提供一份全面指南,助你以正确的方法开展项目。 遵循本文提供的每一步至关重要(虽有少数例外)。就像不做饭或点餐就无法享用美食一样,不亲自动手构建模型,就无法实现模型部署。
23 7
算法金 | 选择最佳机器学习模型的 10 步指南
|
2天前
|
机器学习/深度学习 存储 算法
【机器学习】深入探索机器学习:线性回归算法的原理与应用
【机器学习】深入探索机器学习:线性回归算法的原理与应用
|
3天前
|
机器学习/深度学习 数据采集 算法
机器学习入门:算法与数据的探索之旅
【6月更文挑战第13天】本文介绍了机器学习的基础,包括算法和数据处理的重要性。机器学习算法分为监督学习(如线性回归、决策树)、非监督学习(如聚类、降维)和强化学习。数据处理涉及数据清洗、特征工程、数据分割及标准化,是保证模型性能的关键。对于初学者,建议学习基础数学、动手实践、阅读经典资料和参与在线课程与社区讨论。