Python学习--Machine-Learning吴恩达机器学习编程作业(第⼀周)Machine-Learning 编程作业
Programming Exercise 1:Linear Regression
单变量线性回归
1.1 读取数据并显⽰
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path = ''
data = pd.read_csv(path, header=None, names=['Population', 'Profit']) #参数设置参见pd.read_csv函数
print(data.head()) #输出前5⾏,也可以在括号⾥⾃定义输出前⼏⾏
# print(data.describe())
data.plot(x='Population', y='Profit', kind='scatter', figsize=(10,8)) #参见plot函数参数设置
plt.show()#画图
运⾏结果如图:
1.2 定义代价函数
根据代价函数的定义:
所以在定义代价函数的同时要对数据进⾏处理,将读⼊的数据分为:X,y,theta。同时,我们在X中插⼊X0,令其等于1.
#定义代价函数
def computeCost(X, y ,theta):
Orc = np.power(((X * theta.T) - y), 2)
return np.sum(Orc) / (2 * len(X))
#处理数据
data.insert(0, 'Ones', 1) #加⼀⾏全为1的数
# print(data.head()) #可以边写边看数据
cols = data.shape[1]
X = data.iloc[:,0:cols-1] #X是所有⾏,去掉最后⼀列
y = data.iloc[:,cols-1:cols] #y是所有⾏的最后⼀列
# print(X.head())
# print(y.head())
X = np.matrix(X.values)#将X的值转化为矩阵形式,⽅便计算
y = np.matrix(y.values)
theta = np.matrix(np.array([0,0]))
# print(theta)
# print(X.shape, theta.shape, y.shape)
print(computeCost(X, y, theta))
1.3 定义梯度下降函数
#梯度下降法
def gradientDescent(X, y, theta, alpha, iters):
temp = np.s(theta.shape))
parameters = int(theta.ravel().shape[1]) #计算需求解的参数个数
cost = np.zeros(iters) #构建⼀个iters个0的矩阵,⽤来存放每⼀次的代价函数
for i in range(iters):
error = (X * theta.T) - y
for j in range(parameters):
term = np.multiply(error, X[:,j])
temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))
theta = temp
cost[i] = computeCost(X, y, theta)
linspace函数pythonreturn theta, cost
alpha = 0.01 #初始化参数
iters = 1000
g, cost = gradientDescent(X, y, theta, alpha, iters)
print(g)
print(computeCost(X, y, g))
x = np.linspace(data.Population.min(), data.Population.max(), 100)
f = g[0, 0] + (g[0, 1] * x)
1.4 可视化
#在数据图上显⽰拟合后的结果
ax.plot(x, f, 'r', label='Prediction')
ax.scatter(data.Population, data.Profit, label='Traning Data')
ax.legend(loc=2) #给所绘制的图中,加上各个点或现的注释
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()
#显⽰代价函数随迭代次数变化的结果
fig, ax = plt.subplots(figsize=(10,8))
ax.plot(np.arange(iters), cost, 'r')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()
结果图如下:
以上就是单变量线性回归的全部代码。
多变量线性回归
过程与单变量线性回归类似,,这⾥不再赘述。直接上代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#多变量线性回归
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Path = ""
data = pd.read_csv(Path, header=None, names=['Size', 'Bedrooms', 'Price'])
print(data.head())
# 数据处理
data = (data - an()) / data.std()#将特征进⾏归⼀化处理,否则会出现梯度溢出错误。#加⼀⾏X0=1
data.insert(0, 'X0', 1)
# print(data.head())
cols = data.shape[1]
X = data.iloc[:,0:cols-1]#X是所有⾏,去掉最后⼀列
y = data.iloc[:,cols-1:cols]#y是所有⾏的最后⼀列
X = np.matrix(X.values)#将X的值转化为数组形式,⽅便计算
y = np.matrix(y.values)
theta = np.s(data.shape[1]-1))#将θ的初值设为0
# print(data.shape[1]-1)
#定义代价函数
def computeCost(X, y ,theta):
Orc = np.power(((X * theta.T) - y), 2)
return np.sum(Orc) / (2 * len(X))
# print (theta.shape[1])
# P = int(theta.shape[1])
# print(theta.ravel().shape[1])
# parameters = int(theta.ravel().shape[1])
#定义梯度下降函数
def Descent(X, y, theta, alpha, iterms):
temp = np.s(theta.shape))#⽤⼀个中间变量,来存储θ的值
parameters = int(theta.shape[1])#计算θ中有⼏个参数
cost = np.zeros(iterms)
for i in range(iterms):
error = (X * theta.T) - y #计算偏离误差
for j in range(parameters):
term = np.multiply(error, X[:,j])#multiply 后⾯两个参数相乘
temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))#梯度下降公式
theta = temp
cost[i] = computeCost(X, y, theta)#将每⼀轮计算的代价函数放⼊cost
# cost.append(computeCost(X, y,theta)) #
return theta, cost
alpha = 0.01
iters = 1000
g, cost = Descent(X, y, theta, alpha, iters)
# print(g)
print(computeCost(X, y, g))
#画误差迭代图
fig, ax = plt.subplots(figsize=(10,8))
ax.plot(np.arange(iters), cost, 'r')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论