# 导入三件套
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 导入糖尿病数据集
from sklearn.datasets import load_diabetes
# 导入线性回归模型
from sklearn.linear_model import LinearRegression
# 查看数据集
data_set = load_diabetes()
display(data_set)
feature_name = data_set['feature_names']
data = data_set['data']
target = data_set['target']
print('=====')
display(data.shape,target.shape)
# 查看dataframe模式下的输入数据
data = pd.DataFrame(data, columns=feature_name)
data.head(5)
# 切分数据
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data,target,test_size=0.2)
# 引入线性回归模型
line = LinearRegression()
# 训练模型
line.fit(x_train,y_train)
# 预测
pred = line.predict(x_test)
display(pred)
# 查看系数和截距
display(line.coef_) # 通过系数查看哪些特征对结果影响较大,一般正数影响大于负数影响
display(line.intercept_)
# 三件套
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 导入糖尿病数据集
from sklearn.datasets import load_diabetes
# 导入线性回归算法
from sklearn.linear_model import LinearRegression
data_set = load_diabetes()
feature_name = data_set['feature_names']
data = data_set['data']
target = data_set['target']
data = pd.DataFrame(data, columns=feature_name)
# 设置画布尺寸
plt.figure(figsize=(5*6,2*6))
for i,col in enumerate(data.columns):
# print(i)
# 画出每个特征和结果的散点图
aex = plt.subplot(2,5,i+1)
aex.scatter(data.loc[:,col],target)
# 画出用每个特征单独与结果训练的特征图
line = LinearRegression()
line.fit(data.loc[:,[col]],target)
x = np.linspace(data.loc[:,col].min(),data.loc[:,col].max(),100)
y = line.coef_*x + line.intercept_
aex.plot(x,y,c='r')
# 给每个图在对应特征的训练得分
score = np.round(line.score(data.loc[:,[col]],target),2)
aex.set_title(f'score:{score}',fontsize=20)
结果
可以发现:bmi这个特征和s5特征通过线性回归模型训练后的得分更高,所以这两个因素是对于结果的影响更大。
上面的作图方式和分析方法是需要掌握的,在进行科技论文写作时,这是很好的表述和分析范例。
from sklearn.linear_model import Ridge
对于岭回归,本文中的介绍很粗浅,只是说明了它所解决的问题以及如何调用它,还有调用时的参数说明。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 数据样本设置为200个特征,50个样本
x_train = np.random.randn(50, 200) # 生成一个形状为 (50, 200) 的数组,其中包含的元素是从标准正态分布
# 系数给200个
coef = np.random.randn(200)
# 为了看起来清晰,对部分系数进行归零操作
index_list = np.arange(200)
np.random.shuffle(index_list) # 打乱列表中的元素顺序
coef[index_list[:190]] = 0 # 将参数数组中190个元素变为0
display(x_train.shape, coef.shape)
# 进行点乘运算生成y值:y_train = w1x1 + w2x2 + ... + w200x200
y_train = np.dot(x_train, coef)
display(y_train.shape)
# 绘制预测结果图
plt.figure(figsize=(2*5,2*4))
# 正常参数图
aex1 = plt.subplot(2,2,1)
aex1.plot(coef,c='b')
# 线性回归参数图
from sklearn.linear_model import LinearRegression
coef2 = LinearRegression().fit(x_train, y_train).coef_
aex2 = plt.subplot(2,2,2)
aex2.plot(coef2,c='b')
# 岭回归参数图
from sklearn.linear_model import Ridge
coef3 = Ridge().fit(x_train, y_train).coef_
aex3 = plt.subplot(2,2,3)
aex3.plot(coef3,c='b')
# Losse回归参数图
from sklearn.linear_model import Lasso
coef4 = Lasso(alpha=0.03).fit(x_train, y_train).coef_
aex4 = plt.subplot(2,2,4)
aex4.plot(coef4,c='b')