竞价托管网站建设,域名三天更换一次,无形资产 网站开发,网站设计方案常用的三种线性模型算法–线性回归模型、岭回归模型、套索回归模型
线性模型基本概念 线性模型的一般预测模型是下面这个样子的#xff0c;一般有多个变量#xff0c;也可以称为多个特征x1、x2、x3 … 最简单的线性模型就是一条直线直线的方程式#xff0c;b0是截距#…常用的三种线性模型算法–线性回归模型、岭回归模型、套索回归模型
线性模型基本概念 线性模型的一般预测模型是下面这个样子的一般有多个变量也可以称为多个特征x1、x2、x3 … 最简单的线性模型就是一条直线直线的方程式b0是截距b1是斜率 比如说我们的画一条直线y0.5*x3他是最简单的线性模型
import numpy as np
import matplotlib.pyplot as plt
#生成-5到5的元素数为100的数组
xnp.linspace(-5,5,100)
#输入直线方程
y0.5*x3
plt.plot(x,y,corange)
#图标题
plt.title(straight line)
plt.show()这段代码使用NumPy和Matplotlib库创建了一条直线图。
首先通过np.linspace(-5, 5, 100)生成了一个包含100个元素的数组x范围从-5到5。这个数组用来表示x轴上的数据点。
接下来定义了直线的方程y 0.5*x 3这里使用了NumPy的广播机制在整个数组x上进行运算得到对应的y值。
然后使用plt.plot(x, y, c‘orange’)绘制了直线图传入了x和y作为坐标数据并设置了颜色为橙色。
通过plt.title(‘straight line’)设置了图表的标题为’straight line’。
最后使用plt.show()显示了生成的直线图。
在初中的数学我们都知道是两点确定一条直线比如说下面我们根据13、45来画出一条直线
import numpy as np
import matplotlib.pyplot as plt
#导入线性回归模型
from sklearn.linear_model import LinearRegression
#导入横纵坐标
X[[1],[4]]
y[3,5]
#线性拟合
lrLinearRegression().fit(X,y)
#画图
znp.linspace(0,5,20)
plt.scatter(X,y,s80)
plt.plot(z,lr.predict(z.reshape(-1,1)),ck)
plt.title(Straight Line)
plt.show()print(\n\n\n 直线方程)
print(\n)
print(y{:.3f}.format(lr.coef_[0]),x,{:.3f}.format(lr.intercept_))
print(\n)
print(\n\n\n)直线方程
y0.667 x 2.333这段代码使用了NumPy、Matplotlib和scikit-learn库实现了对一组数据进行线性拟合并可视化展示结果。
首先通过import语句导入了需要的三个库。
然后定义了两个变量X和y分别表示输入的横纵坐标数据。在本例中X包含两个数据点y包含两个对应的输出值。
接下来使用LinearRegression()函数创建了一个线性回归模型并使用fit()方法对输入数据进行拟合。
然后通过np.linspace(0, 5, 20)创建了一个包含20个元素的数组z用于绘制直线图表。使用plt.scatter()函数绘制了散点图包含横纵坐标数据s80表示散点大小为80。使用lr.predict()方法对z进行预测并使用plt.plot()函数将预测结果连接起来画出拟合的直线。
通过plt.title(‘Straight Line’)设置了图表的标题为’Straight Line’。
最后使用plt.show()显示了生成的直线图。
在代码末尾使用print()语句输出了拟合得到的直线方程通过lr.coef_和lr.intercept_得到斜率和截距并使用字符串格式化将其输出。
整体而言这段代码通过scikit-learn库实现了对一组数据进行线性拟合并使用Matplotlib库将拟合结果可视化展示。图表具有标题和坐标轴标签等特性使得数据更加易于理解和解读。 接下是三个点我们多加一个点33你会看到当有多个点的时候直线没有办法穿过三个点所以这个时候我们需要画出一条和三个点的距离和最小的直线
X[[1],[4],[3]]
y[3,5,3]
lrLinearRegression().fit(X,y)
znp.linspace(0,5,20)
plt.scatter(X,y,s80)
plt.plot(z,lr.predict(z.reshape(-1,1)),ck)
plt.title(Straight Line )
plt.show()print(\n\n\n 直线方程)
print(\n)
print(y{:.3f}.format(lr.coef_[0]),x,{:.3f}.format(lr.intercept_))
print(\n)
print(\n\n\n)直线方程
y0.571 x 2.143这段代码与前面的代码类似只是在数据部分进行了一些修改。
在这段代码中X的取值为[[1], [4], [3]]y的取值为[3, 5, 3]即有三个数据点的横纵坐标。
接着使用LinearRegression()函数创建了一个线性回归模型并使用fit()方法对输入数据进行拟合。
然后通过np.linspace(0, 5, 20)创建了一个包含20个元素的数组z用于绘制直线图表。使用plt.scatter()函数绘制了散点图包含横纵坐标数据s80表示散点大小为80。使用lr.predict()方法对z进行预测并使用plt.plot()函数将预测结果连接起来画出拟合的直线。
通过plt.title(‘Straight Line’)设置了图表的标题为’Straight Line’。
最后使用plt.show()显示了生成的直线图。
在代码末尾使用print()语句输出了拟合得到的直线方程通过lr.coef_和lr.intercept_得到斜率和截距并使用字符串格式化将其输出。 下面如果我们用scikit-learn来生成非常多的点这个时候用python的库来绘制一条最优解的曲线就显得非常方便了
from sklearn.datasets import make_regression
#用于生产回归分析数据
X,ymake_regression(n_samples50,n_features1,n_informative1,noise50,random_state1)
#使用线性模型拟合
regLinearRegression()
reg.fit(X,y)
#生产等差数列用来画图
znp.linspace(-3,3,200).reshape(-1,1)
plt.scatter(X,y,cb,s60)
plt.plot(z,reg.predict(z),ck)
plt.title(Linear Regression)print(\n\n\n 直线方程)
print(\n)
print(y{:.3f}.format(reg.coef_[0]),x,{:.3f}.format(reg.intercept_))
print(\n)
print(\n\n\n)直线方程
y79.525 x 10.922这段代码使用make_regression()函数生产回归分析数据其中n_samples表示样本数量n_features表示特征数量n_informative表示有用的特征数量noise表示随机噪声的大小random_state表示随机种子。
然后使用LinearRegression()函数创建了一个线性回归模型并使用fit()方法对输入数据进行拟合。
接着通过np.linspace(-3, 3, 200)创建了一个包含200个元素的数组z用于绘制直线图表。使用plt.scatter()函数绘制了散点图包含横纵坐标数据cb’表示散点颜色为蓝色s60表示散点大小为60。使用reg.predict()方法对z进行预测并使用plt.plot()函数将预测结果连接起来画出拟合的直线。
通过plt.title(‘Linear Regression’)设置了图表的标题为’Linear Regression’。
最后使用plt.show()显示了生成的直线图。
在代码末尾使用print()语句输出了拟合得到的直线方程通过reg.coef_和reg.intercept_得到斜率和截距并使用字符串格式化将其输出。
整体而言这段代码使用make_regression()函数生产了一组回归分析数据并使用线性回归模型对其进行了拟合。图表具有标题和坐标轴标签等特性使得数据更加易于理解和解读。 线性回归 线性回归的原理是找到训练数据集中的y和真实值的平方差最小。接下里我们还是用make_regression函数来生产多数据点。这里生成了100个特征数量为2 的点
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
X,ymake_regression(n_samples100,n_features2,n_informative2,random_state38)
X_train,X_test,y_train,y_testtrain_test_split(X,y,random_state8)
lrLinearRegression().fit(X_train,y_train)print(\n\n\n )
print(\n)
print(lr.coef_:{}.format(lr.coef_[:]))
print(lr.intercept_:{}.format(lr.intercept_))
print(\n)
print(\n\n\n)#这里斜率存储在coef_中截距储存在intercept_中lr.coef_:[70.38592453 7.43213621]
lr.intercept_:-1.4210854715202004e-14线性回归的表现最高分是1.00
print(\n\n\n)
print(\n)
print( train_score: {:.2f}.format(lr.score(X_train,y_train)))
print(test_score: {:.2f}.format(lr.score(X_test,y_test)))
print(\n)
print(\n\n\n) train_score: 1.00
test_score: 1.00这里我们换个数据我们从数据库导入一个现实生活的数据糖尿病的一些数据
from sklearn.datasets import load_diabetes
#导入真实数据集
X,yload_diabetes().data,load_diabetes().target
#拆分成训练集和数据集
X_train,X_test,y_train,y_testtrain_test_split(X,y,random_state8)
#用线性模型拟合
lrLinearRegression().fit(X_train,y_train)print(\n\n\n)
print(\n)
print( train_score: {:.2f}.format(lr.score(X_train,y_train)))
print(test_score: {:.2f}.format(lr.score(X_test,y_test)))
print(\n)
print(\n\n\n) train_score: 0.53
test_score: 0.46岭回归-L2正规化线性模型 岭回归是一种可以避免过拟合的线性模型在岭回归模型里面会保存所有的特征变量但是会减少特征变量的系数值。在回归模型中可以改变alpha的参数来控制减小特征变量系数的参数
from sklearn.linear_model import Ridge
ridge Ridge().fit(X_train,y_train)
print(\n\n\n)
print(\n)
print( train_score: {:.2f}.format(ridge.score(X_train,y_train)))
print(test_score: {:.2f}.format(ridge.score(X_test,y_test)))
print(\n)
print(\n\n\n)train_score: 0.43
test_score: 0.43我们可以试着把alpha的大小改为10、0.1、1来看下他们的打分。同时我们把图形画出来看下他们的差异 from sklearn.linear_model import Ridge
ridge10 Ridge(alpha10).fit(X_train,y_train)
print(\n\n\n)
print(\n)
print( train_score: {:.2f}.format(ridge10.score(X_train,y_train)))
print(test_score: {:.2f}.format(ridge10.score(X_test,y_test)))
print(\n)
print(\n\n\n)train_score: 0.15
test_score: 0.16
from sklearn.linear_model import Ridge
ridge01 Ridge(alpha0.1).fit(X_train,y_train)
print(\n\n\n)
print(\n)
print( train_score: {:.2f}.format(ridge01.score(X_train,y_train)))
print(test_score: {:.2f}.format(ridge01.score(X_test,y_test)))
print(\n)
print(\n\n\n)train_score: 0.52
test_score: 0.47
plt.plot(ridge.coef_,s,labelRidge alpha1)
plt.plot(ridge10.coef_,^,labelRidge alpha10)
plt.plot(ridge01.coef_,v,labelRidge alpha0.1)
plt.plot(lr.coef_,o,labellinear regression)
plt.xlabel(coefficient index)
plt.ylabel(coefficient magnitude)
plt.hlines(0,0,len(lr.coef_))
plt.legend()! 我们可以看出 alpha10,特征变量的系数基本上为0附近 alpha1特征变量的系数变大了 alpha0.1特征变量的系数变得非常大了几乎与线性回归的重合
from sklearn.model_selection import learning_curve,KFold
def plot_learning_curve(est,X,y):training_set_size,train_scores,test_scoreslearning_curve(est,X,y,train_sizesnp.linspace(.1,1,20),cvKFold(20,shuffleTrue,random_state1))estimator_nameest.__class__.__name__lineplt.plot(training_set_size,train_scores.mean(axis1),--,labeltrainingestimator_name)plt.plot(training_set_size,test_scores.mean(axis1),-,labeltestestimator_name,cline[0].get_color())plt.xlabel(Training set size)plt.ylabel(Score)plt.ylim(0,1.1)
plot_learning_curve(Ridge(alpha1),X,y)
plot_learning_curve(LinearRegression(),X,y)
plt.legend(loc(0,1.05),ncol2,fontsize11)我们也可以画出alpha为1的岭回归模型和线性回归莫模型
岭回归和线性回归主要的区别是正规化在少数据的时候岭回归的打分在训练数据集的时候要低但是在测试数据集都差不多。数据足够多两个模型没有太大差异但是如果数据少的话一般是岭回归表现好。 套索回归-L1正规化的线性模型 和岭回归很想套索回归会把系数限制在0附近但是套索回归会让一部分数据的系数等于零有助于让模型更容易理解
from sklearn.linear_model import Lasso
lassoLasso().fit(X_train,y_train)
print(\n\n\n)
print(\n)
print( train_score: {:.2f}.format(lasso.score(X_train,y_train)))
print(test_score: {:.2f}.format(lasso.score(X_test,y_test)))
print(\n)
print(\n\n\n)train_score: 0.36
test_score: 0.37
from sklearn.linear_model import Lasso
lasso01Lasso(alpha0.1,max_iter100000).fit(X_train,y_train)
print(\n\n\n)
print(\n)
print( train_score: {:.2f}.format(lasso.score(X_train,y_train)))
print(test_score: {:.2f}.format(lasso.score(X_test,y_test)))
print(\n)
print(\n\n\n)train_score: 0.53
test_score: 0.46
from sklearn.linear_model import Lasso
lasso00001Lasso(alpha0.0001,max_iter100000).fit(X_train,y_train)
print(\n\n\n)
print(\n)
print( train_score: {:.2f}.format(lasso.score(X_train,y_train)))
print(test_score: {:.2f}.format(lasso.score(X_test,y_test)))
print(\n)
print(\n\n\n)train_score: 0.53
test_score: 0.46
from sklearn.linear_model import Lasso
lasso011Lasso(alpha0.11,max_iter100000).fit(X_train,y_train)
print(\n\n\n)
print(\n)
print( train_score: {:.2f}.format(lasso.score(X_train,y_train)))
print(test_score: {:.2f}.format(lasso.score(X_test,y_test)))
print(\n)
print(\n\n\n)train_score: 0.53
test_score: 0.46我们通过图像来了解一下 plt.plot(lasso.coef_,s,labelRidge alpha1)
plt.plot(lasso011.coef_,^,labelRidge alpha0.11)
plt.plot(lasso00001.coef_,v,labelRidge alpha0.0001)
plt.plot(ridge01.coef_,o,labelRidge alpha0.1)plt.xlabel(coefficient index)
plt.ylabel(coefficient magnitude)alpha1大部分系数为0 alpha0.01还是很多0但少了不少 alpha0.0001这个时候很多点都不是零了。