赞
踩
举例代码展示:
- %matplotlib inline
- import numpy as np
- import matplotlib.pyplot as plt
- x = np.linspace(-6, 6, 100)
- y = 0.5 * x + 2
- plt.plot(x, y)
超参数知识点:
(1)intercept_:截距,线性模型中的独立项
(2)coef_:系数
注意:
录入的X必须是矩阵,行数是样本的数量,列数是特征的数量
n_informative:有多少个特征是“有信息量的”
n_targets:决定你想要生成的目标变量的数量
代码展示:
- #导入糖尿病数据集
- from sklearn.datasets import load_diabetes
- diabetes = load_diabetes()
-
- #特征变量
- X = diabetes.data
- #因变量
- y = diabetes.target
-
- from sklearn.linear_model import LinearRegression
- #划分训练集和测试集
- from sklearn.model_selection import train_test_split
- X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 8)
- #模型实例化+模型训练
- lr = LinearRegression().fit(X_train, y_train)
- print("训练数据集得分:{:.2f}".format(lr.score(X_train, y_train)))
- print("测试数据集得分:{:.2f}".format(lr.score(X_test, y_test)))
导入岭回归模块代码展示:
from sklearn.linear_model import Ridge
绘制学习曲线代码展示:
- #绘制学习曲线:取固定的alpha值,改变训练集的数据量
- from sklearn.model_selection import learning_curve, KFold
- import numpy as np
- def plot_learning_curve(est, X, y):
- training_set_size, train_scores, test_scores = learning_curve(
- est, X, y, train_sizes = np.linspace(.1, 1, 20), cv = KFold(20, shuffle = True, random_state = 1))
- estimator_name = est.__class__.__name__
- line = plt.plot(training_set_size, train_scores.mean(axis = 1), '--',label = "training " + estimator_name)
- plt.plot(training_set_size, test_scores.mean(axis = 1), '-', label = "test " + estimator_name, c = line[0].get_color())
- plt.xlabel('Training set size')
- plt.ylabel('Score')
- plt.ylim(0, 1.1)
-
- plot_learning_curve(Ridge(alpha = 1), X, y)
- plot_learning_curve(LinearRegression(), X, y)
- plt.legend(loc = (0, 1.05), ncol = 2, fontsize = 11)
- plt.grid(linestyle = ':')
导入LASSO回归模块代码展示:
from sklearn.linear_model import Lasso
小结论:
LASSO回归相对于岭回归,更适合做特征选择
绘制函数y = 2 * x ** 2 + 8 * x + 15迭代次数n为1000的图像代码展示:
- import numpy as np
- import matplotlib.pyplot as plt
-
- x = np.linspace(-9,5,100)
- y = 2*x**2 + 8*x + 15
- plt.plot(x, y)
-
- x_iter = 5 #x的初值
- yita = 0.05 #步长
- count = 0 #迭代次数
- while True:
- count += 1
- y_last = 2 * x_iter ** 2 + x_iter * 8 + 15
- plt.scatter(x_iter, y_last)
- x_iter = x_iter - yita * (4 * x_iter + 8)
- y_next = 2 * x_iter ** 2 + x_iter * 8 + 15
- if count == 1000:
- break
- print('最小值点x=', x_iter, '最小值y=', y_next, '迭代次数n=', count)
生成回归数据代码展示:
- #生成回归数据
- from sklearn.datasets import make_regression
- X, y = make_regression(n_samples = 100, n_features = 1, noise = 50, random_state = 8)
- plt.scatter(X,y)
注意:去掉sex列,再分析特征之间的线性相关性
代码展示:
- data_without_sex = data.drop('sex', axis=1)
- #分析特征之间的线性相关性
- corr_df = data_without_sex.corr()
- corr_df
注意:对sex特征进行onehot编码,如果编码完后“0”“1”为“false”“true”,则需要将数据类型改为int
代码展示:
- #对sex特征进行onehot编码
- sex_onehot = pd.get_dummies(data["sex"], prefix = "sex", dtype=int)
- data[sex_onehot.columns] = sex_onehot
- data.head()
使用numpy或sklearn实现线性回归,使用numpy或sklearn实现岭回归;
岭迹分析
导入MAE、MSE、R2系数代码展示:
- from sklearn.metrics import mean_squared_error
- from sklearn.metrics import mean_absolute_error
- from sklearn.metrics import r2_score
残差图:
在进行线性回归与梯度下降算法代码实践的实验中,我主要通过利用sklearn库和matplotlib库对数据集进行分析和可视化,从而深入了解了线性回归、岭回归以及LASSO回归等机器学习算法。
首先,通过实验我学会了如何利用matplotlib.pyplot库画出直线,并掌握了利用sklearn线性回归求直线斜率的方法。在此基础上,我对糖尿病数据集进行了线性回归分析,进一步理解了线性回归在实际问题中的应用。
然后,我尝试了岭回归实践,并学会了如何调节岭回归的参数。通过实验,我认识到岭回归在解决过拟合问题方面的优势。接着,我转向LASSO回归的sklearn实现,并学会了如何调整LASSO回归的参数,以便在实际问题中实现更精确的预测。
在实验过程中,我还深入研究了梯度下降算法,并实际操作了批量梯度下降算法(BGD)。此外,我导入了鲍鱼数据集,并对其进行了预处理。通过对鲍鱼数据集的线性回归、岭回归和LASSO回归实践,我更加深刻地理解了这些算法在实际问题中的应用和效果。
总的来说,这次实验让我对线性回归、梯度下降算法有了更加深入的理解,并且通过实际操作,我掌握了如何利用这些算法解决实际问题。此外,我还学会了如何调整相关参数,以便在不同的问题中实现更优的预测效果。这次实验不仅提高了我的编程能力,也加深了我对机器学习算法的理解,为以后的学习和研究打下了坚实的基础。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。