机器学习 1 - 线性回归
单变量线性回归
导入需要使用的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
导入数据集。提醒大家:一定要把数据文件ex1data1.txt放在和程序同一个文件夹里,否则需要使用绝对路径访问文件
将csv文件读入并转化为数据框形式,路径,指定哪一行作为表头。默认设置为0(即第一行作为表头),如果没有表头的话,要修改参数,设置header=None,
指定列的名称,用列表表示。一般我们没有表头,即header=None时,这个用来添加列名
在默认情况下,head命令显示文件的头5行内容
path = 'ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])
data.head() #预览数据
Population | Profit | |
---|---|---|
0 | 6.1101 | 17.5920 |
1 | 5.5277 | 9.1302 |
2 | 8.5186 | 13.6620 |
3 | 7.0032 | 11.8540 |
4 | 5.8598 | 6.8233 |
对于数值数据,结果的索引将包括计数,平均值,标准差,最小值,最大值以及较低的百分位数和50。默认情况下,较低的百分位数为25,较高的百分位数为75.50百分位数与中位数相同。
data.describe()
Population | Profit | |
---|---|---|
count | 97.000000 | 97.000000 |
mean | 8.159800 | 5.839135 |
std | 3.869884 | 5.510262 |
min | 5.026900 | -2.680700 |
25% | 5.707700 | 1.986900 |
50% | 6.589400 | 4.562300 |
75% | 8.578100 | 7.046700 |
max | 22.203000 | 24.147000 |
数据可视化,绘制散点图 kind: 取值为 line 或者 scatter, 后者为默认值 图像大小
data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))
plt.show()
现在让我们使用梯度下降来实现线性回归,以最小化成本函数。 以下代码示例中实现的方程在“练习”文件夹中的“ex1.pdf”中有详细说明。
首先,我们将创建一个以参数θ为特征函数的代价函数(误差平方函数)
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{
{
{\left( {
{h}_{\theta }}\left( {
{x}^{(i)}} \right)-{
{y}^{(i)}} \right)}^{2}}} J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
np.power(x1,x2)数组的元素分别求n次方。x2可以是数字,也可以是数组,但是x1和x2的列数要相同
我们的目标,就是求出最小的 模型参数,也就是使得代价函数最小
def computeCost(X, y, theta):
# your code here (appro ~ 2 lines)
inner = np.power(