import matplotlib.pyplot as plt from scipy.stats import norm X = df.iloc[:, 4:] # 特征数据 X = scaler.fit_transform(X) y_1 = df[['U(Ⅳ)浓度']] # 目标变量1 y_2 = df[['U(Ⅵ)浓度']] # 目标变量2) # 添加偏置项 x0=1 到 X 中 X_b = np.c_[np.ones((X.shape[0], 1)), X] # 初始化学习率,迭代次数和初始参数 eta = 0.1 n_iterations = 1000 theta = np.random.randn(2, 1) # 定义似然函数计算梯度 def likelihood(theta, X, y): m = y.size h = X.dot(theta).flatten() mu = h sigma = 1 # 假设高斯噪声的标准差是1 p = norm(mu, sigma).pdf(y.flatten()) L = np.prod(p) return L # 定义损失函数计算梯度 def loss(theta, X, y): m = y.size h = X.dot(theta).flatten() mu = h sigma = 1 # 假设高斯噪声的标准差是1 p = norm(mu, sigma).pdf(y.flatten()) J = -np.sum(np.log(p)) return J/m # 批量梯度下降算法 for iteration in range(n_iterations): gradients = 2/X_b.shape[0] * X_b.T.dot(X_b.dot(theta) - y) theta = theta - eta * gradients if iteration % 100 == 0: print(f"Iteration {iteration}: theta={theta.flatten()}, likelihood={likelihood(theta, X_b, y)}, loss={loss(theta, X_b, y)}") # 绘制数据和回归直线 plt.plot(X, y, "b.") X_new = np.array([[0], [10]]) X_new_b = np.c_[np.ones((2, 1)), X_new] y_predict = X_new_b.dot(theta) plt.plot(X_new, y_predict, "r-", linewidth=2, label="Predictions") plt.xlabel("X") plt.ylabel("y") plt.legend() plt.show()
时间: 2024-04-01 19:35:50 浏览: 57
这段代码是一个简单的线性回归模型,使用了批量梯度下降法来拟合数据。具体来说,它首先进行了特征数据的标准化处理,然后定义了似然函数和损失函数来计算梯度,最后使用批量梯度下降法来更新参数并拟合数据。在训练过程中,它每迭代100次就会输出当前参数、似然函数和损失函数的值。最后,它将拟合出的回归直线和原始数据一起绘制在图上,以便进行可视化比较。
相关问题
import numpy as npimport matplotlib.pyplot as pltfrom scipy.stats import norm# 生成随机数据data = np.random.randn(1000)# 绘制直方图plt.hist(data, bins=30, density=True, alpha=0.5)# 拟合正态分布曲线mu, std = norm.fit(data)x = np.linspace(-5, 5, 100)p = norm.pdf(x, mu, std)plt.plot(x, p, 'k', linewidth=2)# 显示图像plt.show()讲一下各变量
这是Python中导入NumPy、Matplotlib和SciPy库的代码。这些库都是用于科学计算和数据可视化的常用工具。其中NumPy提供了高效的数组和矩阵运算功能,Matplotlib用于绘制各种类型的图表,而SciPy则提供了许多科学计算的函数和工具。在导入这些库后,我们可以使用它们提供的函数和类来进行各种计算和数据处理操作。
import pandas as pd import numpy as np from scipy import stats from sklearn.cluster import KMeans import matplotlib.pyplot as plt
这段代码的作用是导入一些常用的机器学习和数据分析库,包括pandas、numpy、scipy、sklearn和matplotlib.pyplot。其中,pandas和numpy用于数据处理和操作,scipy用于科学计算,sklearn用于机器学习算法,matplotlib用于数据可视化。另外,这段代码还使用了KMeans算法来进行聚类分析。
阅读全文