机器学习笔记—线性回归

机器学习笔记—多元线性回归

直接上代码

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

#正规方程,替代梯度下降函数
#Theta = (X.T * X).I * X.T * y

print(‘加载数据…’)
path = ‘./data/ex1data2.txt’
data = pd.read_csv(path,header=None,names=[‘Size’,‘Bedrooms’,‘Price’])
#print(data.head())

#特征归一化,把数据控制在合理的范围
#data = (data - data.mean()) / data.std()
#print(data.head())

#正则化
data=(data-data.min())/(data.max()-data.min())

#在训练集中添加一列,以便我们可以使用向量化的解决方案来计算代价和梯度
#相当于添加了一个Xo,补齐数据
data.insert(0,‘One’,1)

#设置变量X(训练数据)和y(目标变量)
#iloc是位置索引,从数据表中取出相应的值
cols = data.shape[1]# 获取data[]的维数 - 3
X = data.iloc[:,0:cols-1] #所有行,不包含最后一列
y = data.iloc[:,cols-1:cols] #所有行,只包含最后一列
print(X.head())#只显示前5个数据

print(y.head())#只显示前5个数据

#代价函数是numpy矩阵,故需要转换X,Y,才能使用
#np.matrix()函数用于从类数组对象或数据字符串返回矩阵
X = np.matrix(X.values)
y = np.matrix(y.values)
theta = np.matrix(np.array([0,0,0]))#初始化参数,1x3矩阵
print(theta)

#计算代价损失
def computeCost(X,y,theta):
num = len(X)
inner = np.power(((X * theta.T)-y),2)
cost = np.sum(inner) / (2*num)
return cost
costTest = computeCost(X,y,theta)
print(“cost:”,costTest)

#批量梯度下降
#返回来一个给定形状和类型的用0填充的数组
def gradientDescent(X,y,theta,alpha,iters):
# 按照theta的形状建立temp为了临时存储theta,方便进行迭代更新。
temp = np.matrix(np.zeros(theta.shape))
# 实际就是j的个数,批量梯度中j为0和1,所以parameters为2.
parameters = int(theta.ravel().shape[1])
cost = np.zeros(iters)
for i in range(iters):
error = (X * theta.T) - y
for j in range(parameters):
# j=1时term为errors, j=2时,X为原生X的向量值。
#np.multiply:矩阵对应的元素相乘
term = np.multiply(error,X[:,j])
# 梯度下降公式的代码实现,将theta0和theta1存入temp
temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))
theta = temp
cost[i] = computeCost(X,y,theta)

return theta,cost

alpha = 0.01#学习速率α

iters = 1000#要执行的迭代次数。

#执行线性回归在数据集上

g,cost = gradientDescent(X,y,theta,alpha,iters)

#获得模型的代价

computeCost(X,y,g)

fig, ax = plt.subplots(figsize=(8,6))

ax.plot(np.arange(iters), cost, ‘r’)

ax.set_xlabel(‘Iterations’)

ax.set_ylabel(‘Cost’)

ax.set_title(‘Error vs. Training Epoch’)

plt.show()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值