吴恩达机器学习ex1 python实现
程序员文章站
2022-06-16 20:19:42
...
这个项目包含了吴恩达机器学习ex1的python实现
1.输出一个5*5的单位矩阵
import numpy as np
A=np.eye(5)
A.shape
(5, 5)
2. 单变量的线性回归
根据城市人口数量,预测开小吃店的利润 数据在ex1data1.txt里,第一列是城市人口数量,第二列是该城市小吃店利润。
2.1导入数据并查看数据分布
导入数据,原数据中无标题,故header=None,路径也可以用r’ xxxxx ‘
import pandas as pd
import matplotlib.pyplot as plt
data =pd.read_csv("C:\\Users\\xxx\\Desktop\\机器学习\\machine-learning-ex1\\ex1\\ex1data1.txt",header=None,names=['population','profit'])
这里有两种画图方式
# plt.scatter(data.iloc[:,0],data.iloc[:,1],marker='x',color='r')
# plt.xlabel('population')
# plt.ylabel('profit')
data.plot(kind='scatter',x='population',y='profit',marker='x',color='r')
<matplotlib.axes._subplots.AxesSubplot at 0x17f8fe99908>
2.2梯度下降
2.2.1数据预处理
插入一行数据,代表x0,X代表特征向量,y代表标签
X=data.iloc[:,:-1]
y=data.iloc[:,2:]
X.head()
x0 | population | |
---|---|---|
0 | 1 | 6.1101 |
1 | 1 | 5.5277 |
2 | 1 | 8.5186 |
3 | 1 | 7.0032 |
4 | 1 | 5.8598 |
y.head()
profit | |
---|---|
0 | 17.5920 |
1 | 9.1302 |
2 | 13.6620 |
3 | 11.8540 |
4 | 6.8233 |
代价函数是应该是numpy矩阵,故转化为矩阵类型,并初始化theta
X=np.matrix(X.values)
y=np.matrix(y.values)
theta=np.matrix(np.array([0,0]))
X.shape,y.shape,theta.shape
((97, 2), (97, 1), (1, 2))
2.2.2 定义模型
根据公式定义代价函数
def computeCost(X, y, theta):
inner = np.power((( X*theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))
computeCost(X, y, theta)
32.072733877455676
根据公式实现梯度下降
def gradientDescent(X,y,theta,alpha,iters):
temp=np.matrix(np.zeros(theta.shape))
parameters=int(theta.ravel().shape[1])
#ravel()方法将数组维度拉成一维数组
cost=np.zeros(iters)
for i in range(iters):
error=(X*theta.T)-y
#(h(θ)-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)
return theta,cost
alpha=0.01
iters=1500
2.3 模型预测及数据展示
根据数据计算最优theta
g,cost=gradientDescent(X,y,theta,alpha,iters)
g
matrix([[-3.63029144, 1.16636235]])
进行预测
predict1 = [1,3.5]*g.T
print("predict1:",predict1)
predict2 = [1,7]*g.T
print("predict2:",predict2)
predict1: [[0.45197679]]
predict2: [[4.53424501]]
数据展示
x=np.linspace(data.population.min(),data.population.max(),100)
#linspace相当于在啊arg1和arg2中产生arg3个数
f=g[0,0]+(g[0,1]*x)
fig,ax=plt.subplots(figsize=(12,8))
#相当于fig = plt.figure() ax = fig.add_subplot(1,1,1)
ax.plot(x,f,'r',label='prediction')
ax.scatter(data.population,data.profit,label='Traning Data')
ax.legend(loc=1)
#loc表示图标相应的位置
ax.set_xlabel('population')
ax.set_ylabel('profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()
3. 多变量的线性回归
根据已有数据,建立模型,预测房屋的售价,ex1data2.txt里的数据,第一列是房屋大小,第二列是卧室数量,第三列是房屋售价
3.1数据预处理
data2 =pd.read_csv("C:\\Users\\xxx\\Desktop\\机器学习\\machine-learning-ex1\\ex1\\ex1data2.txt",header=None,names=['Size', 'Bedrooms', 'Price'])
data2.head()
Size | Bedrooms | Price | |
---|---|---|---|
0 | 2104 | 3 | 399900 |
1 | 1600 | 3 | 329900 |
2 | 2400 | 3 | 369000 |
3 | 1416 | 2 | 232000 |
4 | 3000 | 4 | 539900 |
归一化处理,目的是让梯度下降的速度更快
data2=(data2-data2.mean())/data2.std()
data2.head()
Size | Bedrooms | Price | |
---|---|---|---|
0 | 0.130010 | -0.223675 | 0.475747 |
1 | -0.504190 | -0.223675 | -0.084074 |
2 | 0.502476 | -0.223675 | 0.228626 |
3 | -0.735723 | -1.537767 | -0.867025 |
4 | 1.257476 | 1.090417 | 1.595389 |
data2.insert(0,'ones',1)
X2=data2.iloc[:,:-1]
X2.head()
y2=data2.iloc[:,3:]
X2 = np.matrix(X2.values)
y2 = np.matrix(y2.values)
theta2 = np.matrix(np.array([0,0,0]))
3.2模型预测
g2, cost2 = gradientDescent(X2, y2, theta2, alpha, iters)
g2
matrix([[-1.10856950e-16, 8.84042349e-01, -5.24551809e-02]])
3.3正规方程
利用正规方程解出向量θ
def normalEqn(X,y):
theta=np.linalg.inv(X.T*X)*X.T*y
return theta
final_theta2=normalEqn(X, y)
final_theta2
matrix([[-3.89578088],
[ 1.19303364]])
4.一些注意事项
- 注意数据格式的转换;
- 对于 np.array 对象
元素乘法 用 a*b 或 np.multiply(a,b) ,
矩阵乘法 用 np.dot(a,b) 或 np.matmul(a,b) 或a.dot(b)
- 对于 np.matrix 对象
元素乘法 用 np.multiply(a,b)
矩阵乘法 用 a*b 或 np.dot(a,b) 或 np.matmul(a,b) 或 a.dot(b)。
下一篇: 心跳与超时:高并发高性能的时间轮超时器
推荐阅读
-
吴恩达线性回归ex1python实现
-
Chapter7:正则化 Regularization:AndrewNg吴恩达《机器学习》笔记
-
Coursera吴恩达《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化
-
吴恩达 机器学习第二周 logistic_regression 单层网络梯度下降法实现
-
吴恩达机器学习课程ex2:Logistic Regression
-
Coursera吴恩达机器学习课程 第2周作业代码
-
吴恩达机器学习 8.6 逻辑回归(Logistic Regression)
-
吴恩达 机器学习课程 coursera 第一次编程作业(Linear Regression Multi) python实现
-
吴恩达机器学习编程作业python版:第一次作业
-
吴恩达 机器学习课程 coursera 第二次编程作业(Logistic Regression Regularized) python实现