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

一、主要内容:

        1、利用matplotlib.pyplot画直线

举例代码展示:

%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)

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

超参数知识点:

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

(2)coef_:系数

注意:

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

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

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

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

代码展示:

#导入糖尿病数据集
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)))

        4、岭回归实践

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

from sklearn.linear_model import Ridge

        5、岭回归的参数调节

绘制学习曲线代码展示:

#绘制学习曲线:取固定的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 = ':')

        6、LASSO回归的sklearn实现

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

from sklearn.linear_model import Lasso

        7、LASSO回归的参数调节

小结论:

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

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

绘制函数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)

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

生成回归数据代码展示:

#生成回归数据
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)

        10、导入鲍鱼数据集

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

代码展示:

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

        11、鲍鱼数据预处理

注意:对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()

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

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

岭迹分析

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

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

导入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回归实践,我更加深刻地理解了这些算法在实际问题中的应用和效果。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值