百度搜索什么关键词能搜到网站,学校学网页设计需要自带电脑吗,百度图片搜索引擎,百度竞价推广优势在单变量线性回归的机器学习代码中#xff0c;我们讨论了批量梯度下降代码的实现#xff0c;本篇将进行随机梯度下降的代码实现#xff0c;整体和批量梯度下降代码类似#xff0c;仅梯度下降部分不同#xff1a;
import numpy as np
import pandas as pd
import matplotl…在单变量线性回归的机器学习代码中我们讨论了批量梯度下降代码的实现本篇将进行随机梯度下降的代码实现整体和批量梯度下降代码类似仅梯度下降部分不同
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import joblib# 导入数据
path ex1data1.txt
data pd.read_csv(path, headerNone, names[Population, Profit])# 分离特征和目标变量
X data.iloc[:, 0:1].values # Population列
y data.iloc[:, 1].values # Profit列
m len(y) # 样本数量# 添加一列全为1的截距项
X np.append(np.ones((m, 1)), X, axis1)# 批量梯度下降参数
alpha 0.01 # 学习率
iterations 1500 # 迭代次数# 随机梯度下降算法
def stochasticGradientDescent(X, y, theta, alpha, num_iters):m len(y)for iter in range(num_iters):for i in range(m):# 随机选择一个数据点进行梯度计算random_index np.random.randint(0, m)X_i X[random_index, :].reshape(1, X.shape[1])y_i y[random_index].reshape(1, 1)# 计算预测值和误差prediction np.dot(X_i, theta)error prediction - y_i# 更新参数theta theta - (alpha * X_i.T.dot(error)).flatten()return theta# 初始化模型参数
theta np.zeros(2)
随机梯度下降前的损失显示# 定义损失函数用于显示调用前后的损失值对比
def computeCost(X, y, theta):m len(y)predictions X.dot(theta)square_err (predictions - y) ** 2return np.sum(square_err) / (2 * m)
# 计算初始损失
initial_cost computeCost(X, y, theta)
print(初始的损失值:, initial_cost)# 使用随机梯度下降进行模型拟合
theta stochasticGradientDescent(X, y, theta, alpha, iterations)
随机梯度下降后的损失显示# 计算优化后的损失
final_cost computeCost(X, y, theta)
print(优化后的损失值:, final_cost)
使用需要预测的数据X进行预测# 假设的人口数据
population_values [3.5, 7.0] # 代表35,000和70,000人口# 对每个人口值进行预测
for pop in population_values:# 将人口值转换为与训练数据相同的格式包括截距项predict_data np.matrix([1, pop]) # 添加截距项# 使用模型进行预测predict_profit np.dot(predict_data, theta.T)print(f模型预测结果 {pop} : {predict_profit[0,0]})使用模型绘制函数# 创建预测函数
x_values np.array(X[:, 1])
f theta[0] * np.ones_like(x_values) (theta[1] * x_values) # 使用广播机制# 绘制图表
fig, ax plt.subplots(figsize(12, 8))
ax.plot(x_values, f, r, labelPrediction)
ax.scatter(data.Population, data.Profit, labelTraining Data)
ax.legend(loc2)
ax.set_xlabel(Population)
ax.set_ylabel(Profit)
ax.set_title(Predicted Profit vs. Population Size)
plt.show()
保存模型# 保存模型
joblib.dump(theta, linear_regression_model.pkl)
加载模型并执行预测# 加载模型
loaded_model joblib.load(linear_regression_model.pkl)# 假设的人口数据
population_values [3.5, 7.0] # 代表35,000和70,000人口# 使用模型进行预测
for pop in population_values:# 更新预测数据矩阵包括当前的人口值predict_data np.matrix([1, pop])# 进行预测predict_value np.dot(predict_data, loaded_model.T)print(f模型预测结果 {pop} : {predict_value[0,0]})实际测试下来同迭代次数情况下随机梯度下降的收敛度远低于批量梯度下降
初始的损失值: 32.072733877455676
优化后的损失值: 6.037742815925882 批量梯度下降为4.47802760987997
模型预测结果 3.5 : -0.6151395665038226
模型预测结果 7.0 : 2.9916563373877203
模型预测结果 3.5 : -0.6151395665038226
模型预测结果 7.0 : 2.9916563373877203即便是将迭代次数增加10倍也无法有效降低太多损失15000次迭代的结果
优化后的损失值: 5.620745223253086个人总结随机梯度下降估计只有针对超大规模的数据有应用意义。
注本文为学习吴恩达版本机器学习教程的代码整理使用的数据集为https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes/blob/f2757f85b99a2b800f4c2e3e9ea967d9e17dfbd8/code/ex1-linear%20regression/ex1data1.txt