当前位置:   article > 正文

分享一下利用sklearn进行线性回归与梯度下降算法代码实践_sklearn线性回归代码

sklearn线性回归代码

一、主要内容:

        1、利用matplotlib.pyplot画直线

举例代码展示:

  1. %matplotlib inline
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. x = np.linspace(-6, 6, 100)
  5. y = 0.5 * x + 2
  6. plt.plot(x, y)

        2、利用sklearn线性回归求直线斜率

超参数知识点:

(1)intercept_:截距,线性模型中的独立项

(2)coef_:系数

注意:

录入的X必须是矩阵,行数是样本的数量,列数是特征的数量

n_informative:有多少个特征是“有信息量的”

n_targets:决定你想要生成的目标变量的数量

        3、糖尿病数据集的线性回归分析

代码展示:

  1. #导入糖尿病数据集
  2. from sklearn.datasets import load_diabetes
  3. diabetes = load_diabetes()
  4. #特征变量
  5. X = diabetes.data
  6. #因变量
  7. y = diabetes.target
  8. from sklearn.linear_model import LinearRegression
  9. #划分训练集和测试集
  10. from sklearn.model_selection import train_test_split
  11. X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 8)
  12. #模型实例化+模型训练
  13. lr = LinearRegression().fit(X_train, y_train)
  14. print("训练数据集得分:{:.2f}".format(lr.score(X_train, y_train)))
  15. print("测试数据集得分:{:.2f}".format(lr.score(X_test, y_test)))

        4、岭回归实践

导入岭回归模块代码展示:

from sklearn.linear_model import Ridge

        5、岭回归的参数调节

绘制学习曲线代码展示:

  1. #绘制学习曲线:取固定的alpha值,改变训练集的数据量
  2. from sklearn.model_selection import learning_curve, KFold
  3. import numpy as np
  4. def plot_learning_curve(est, X, y):
  5. training_set_size, train_scores, test_scores = learning_curve(
  6. est, X, y, train_sizes = np.linspace(.1, 1, 20), cv = KFold(20, shuffle = True, random_state = 1))
  7. estimator_name = est.__class__.__name__
  8. line = plt.plot(training_set_size, train_scores.mean(axis = 1), '--',label = "training " + estimator_name)
  9. plt.plot(training_set_size, test_scores.mean(axis = 1), '-', label = "test " + estimator_name, c = line[0].get_color())
  10. plt.xlabel('Training set size')
  11. plt.ylabel('Score')
  12. plt.ylim(0, 1.1)
  13. plot_learning_curve(Ridge(alpha = 1), X, y)
  14. plot_learning_curve(LinearRegression(), X, y)
  15. plt.legend(loc = (0, 1.05), ncol = 2, fontsize = 11)
  16. plt.grid(linestyle = ':')

        6、LASSO回归的sklearn实现

导入LASSO回归模块代码展示:

from sklearn.linear_model import Lasso

        7、LASSO回归的参数调节

小结论:

LASSO回归相对于岭回归,更适合做特征选择

        8、梯度下降算法及其实践

绘制函数y = 2 * x ** 2 + 8 * x + 15迭代次数n为1000的图像代码展示:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. x = np.linspace(-9,5,100)
  4. y = 2*x**2 + 8*x + 15
  5. plt.plot(x, y)
  6. x_iter = 5 #x的初值
  7. yita = 0.05 #步长
  8. count = 0 #迭代次数
  9. while True:
  10. count += 1
  11. y_last = 2 * x_iter ** 2 + x_iter * 8 + 15
  12. plt.scatter(x_iter, y_last)
  13. x_iter = x_iter - yita * (4 * x_iter + 8)
  14. y_next = 2 * x_iter ** 2 + x_iter * 8 + 15
  15. if count == 1000:
  16. break
  17. print('最小值点x=', x_iter, '最小值y=', y_next, '迭代次数n=', count)

        9、批量梯度下降算法(BGD)

生成回归数据代码展示:

  1. #生成回归数据
  2. from sklearn.datasets import make_regression
  3. X, y = make_regression(n_samples = 100, n_features = 1, noise = 50, random_state = 8)
  4. plt.scatter(X,y)

        10、导入鲍鱼数据集

注意:去掉sex列,再分析特征之间的线性相关性

代码展示:

  1. data_without_sex = data.drop('sex', axis=1)
  2. #分析特征之间的线性相关性
  3. corr_df = data_without_sex.corr()
  4. corr_df

        11、鲍鱼数据预处理

注意:对sex特征进行onehot编码,如果编码完后“0”“1”为“false”“true”,则需要将数据类型改为int

代码展示:

  1. #对sex特征进行onehot编码
  2. sex_onehot = pd.get_dummies(data["sex"], prefix = "sex", dtype=int)
  3. data[sex_onehot.columns] = sex_onehot
  4. data.head()

        12、实现线性回归和岭回归

使用numpy或sklearn实现线性回归,使用numpy或sklearn实现岭回归;

岭迹分析

        13、使用LASSO构建鲍鱼年龄预测模型

        14、鲍鱼年龄预测模型效果评估

导入MAE、MSE、R2系数代码展示:

  1. from sklearn.metrics import mean_squared_error
  2. from sklearn.metrics import mean_absolute_error
  3. from sklearn.metrics import r2_score

残差图:

二、学习心得:

         在进行线性回归与梯度下降算法代码实践的实验中,我主要通过利用sklearn库和matplotlib库对数据集进行分析和可视化,从而深入了解了线性回归、岭回归以及LASSO回归等机器学习算法。

        首先,通过实验我学会了如何利用matplotlib.pyplot库画出直线,并掌握了利用sklearn线性回归求直线斜率的方法。在此基础上,我对糖尿病数据集进行了线性回归分析,进一步理解了线性回归在实际问题中的应用。

        然后,我尝试了岭回归实践,并学会了如何调节岭回归的参数。通过实验,我认识到岭回归在解决过拟合问题方面的优势。接着,我转向LASSO回归的sklearn实现,并学会了如何调整LASSO回归的参数,以便在实际问题中实现更精确的预测。

        在实验过程中,我还深入研究了梯度下降算法,并实际操作了批量梯度下降算法(BGD)。此外,我导入了鲍鱼数据集,并对其进行了预处理。通过对鲍鱼数据集的线性回归、岭回归和LASSO回归实践,我更加深刻地理解了这些算法在实际问题中的应用和效果。

        总的来说,这次实验让我对线性回归、梯度下降算法有了更加深入的理解,并且通过实际操作,我掌握了如何利用这些算法解决实际问题。此外,我还学会了如何调整相关参数,以便在不同的问题中实现更优的预测效果。这次实验不仅提高了我的编程能力,也加深了我对机器学习算法的理解,为以后的学习和研究打下了坚实的基础。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/829953
推荐阅读
相关标签
  

闽ICP备14008679号