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