单变量回归
问题描述:你的数据集中,x 是某个城市的人口数量,y 是你的餐车在那个城市的盈亏数额。对这个数据集进行挖掘,帮助你进行决策。
首先导入并分析数据:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def loadData(firename):
return pd.read_csv(firename, header=None, names=['Population', 'Profit'])
data = loadData('ex1data1.txt')
print(data.head())
print(data.describe())
data.plot(kind='scatter', x='Population', y='Profit', figsize=(12, 8))
plt.show()
输出得到 data 的数据形式以及数据特征:
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
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
Process finished with exit code 0
绘制数据集的散点图:
接着对数据进行预处理:
def initData(data):
# 为每个样本添加 x0 = 1
# 将数据集分为特征集和标签集
data.insert(0, 'Ones', 1)
cols = data.shape[1]
X = data.iloc[:, 0:cols - 1]
y = data.iloc[:, cols - 1:cols]
# 将特征集和标签集转化为 numpy 矩阵
X = np.matrix(X.values)
y = np.matrix(y.values)
# 初始化 alpha 为全 0
theta = np.matrix(np.array([0, 0]))
return X, y, theta
首先将 X 、y 分别转化为:
Ones Population
0 1 6.1101
1 1 5.5277
2 1 8.5186
3 1 7.0032
4 1 5.8598
.. ... ...
92 1 5.8707
93 1 5.3054
94 1 8.2934
95 1 13.3940
96 1 5.4369
[97 rows x 2 columns]
Profit
0 17.59200
1 9.13020
2 13.66200
3 11.85400
4 6.82330
.. ...
92 7.20290
93 1.98690
94 0.14454
95 9.05510
96 0.61705
[97 rows x 1 columns]
然后转化为 Numpy 矩阵,返回用于矩阵运算的 X 、y 、theta,可以查看三个矩阵的大小:
data = loadData('ex1data1.txt')
X, y, theta = initData(data)
print(X.shape, theta.shape, y.shape)
(97, 2) (1, 2) (97, 1)
Process finished with exit code 0
根据如下公式计算 cost :