吴恩达机器学习课程是机器学习领域的知名课程,对于入门机器学习起着非常关键的作用。但是由于年代问题,课程中使用的是Octave,即matlab框架,难以适用现今流行的python AI语言。特此,笔者在网上找到了python版的作业,来与各位分享,同时纪录自己学习过程,共勉。
------------------------------------------------------------------------------------------------
python版吴恩达机器学习资料(仅供学习和参考,侵权请联系删除)
------------------------------------------------------------------------------------------------
第三方库介绍
exe1中设计的三个第三方库,分别是:
-
Numpy:
由于机器学习算法在数据处理过程中大都涉及线性代数的知识,需要用到矩阵操作,Python本身没有处理矩阵的数据类型,因此需要使用附加的函数库。其中NumPy函数库是Python开发环境的一个独立模块,是Python的一种开源的数值计算扩展工具。
它是处理数值计算最为基础的类库。这种工具可以用来存储和处理大型多维矩阵,比Python自身的列表结构要高效的多。尽管Python的list类型已经提供了类似于矩阵的表示形式,但是NumPy提供了更多的科学计算函数。 -
Pandas:
是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处理统一的数值数组数据。
-Matplotlib
是数据可视化的重要第三方库
一元线性回归
读入数据并展示,txt文件如图所示:
调用了pandas的pd.read_csv函数
具体用法:pd.read_csv函数调用规则
调用了pandas中的plot函数,
kind:scatter表示散点图
figsize : a tuple (width, height) in inches#图片尺寸大小
具体用法如下:
plot函数用法
定义一个名为computeCost的函数,来还原代价函数,X为矩阵
插入一列1来表示X0,因为实际上并没有X0,只是为了矩阵维数一致而引入的X0,所以X0恒为1。
初始化X和y,数据来源于上面定义过的data
shape函数是numpy.core.fromnumeric中的函数,它的功能是查看矩阵或者数组的维数。
iloc 主要是通过行号获取行数据,划重点,序号!序号!序号!
iloc[0:1],由于Python默认是前闭后开,所以,这个选择的只有第一行!
调用head来检查矩阵是否正确,当数据集较多时,可在head()中写入要观察的行数,例如head(3)只输出前三行
由于上面定义的X,y是txt里的数据,而运算时是矩阵运算,因此要转化成矩阵,调用np的matrix函数。
同时初始化要更新的theta的值,theta0为0,theta1初始化0.
随后调用上面写的computeCost函数即可得到代价值
进一步调用梯度下降算法:
详细注释:
函数构造完成后,只需要给出一些初始值,即可调用该函数了。
例如此处给出的学习率为0.01,迭代次数为1500
注意返回的g为矩阵【theta0,theta1】,cost为1500个代价函数值组成的数组。
想预测哪个x只要输入【1,x】和theta相乘即可。
生成拟合直线
linespace函数:生成指定范围内指定个数的一维数组
在指定的间隔[“start”,“stop”,num]内均匀地返回数字。返回“num”个等间距的样本。
具体用法:linespace用法
subplot为子图函数,fig代表绘图窗口(Figure);ax代表这个绘图窗口上的坐标系(axis),一般会继续对ax进行操作。
至此一元情况分析完毕,下面分析多元线性回归情况
多元线性回归
同样先导入相关数据
txt文件为:
发现自变量之间差距过大,为了提高效率,要进行特征缩放。
下面为迭代过程,可以类比一元情况:
正规方程
下面介绍正规方程解法:
利用最小二乘法,可以推导:
将上述公式转化成代码即可:
其中:np.linalg.inv()为矩阵求逆函数
------------------------------------------------------------------------------------------------