机器学习——线性回归

0、前言:

  • 线性回归会用到python第三方库:sklearn.linear_model中的LinearRegression
  • 导入第三方库的方法:from sklearn.linear_model import LinearRegression
  • 使用LinearRegression(二维数据,一维数据)进行预测,其中数据类型可以是pandas中的DataFrame或者series,也可以是numpy中的array数据,但维度一定要正确输入。
  • 在线性回归模型中可以查看训练好的模型当中的特征系数(y=kx+b当中的k)和训练好的模型当中的截距(y=kx+b当中的b),方法是调用训练好的模型的属性coef_查看系数,调用训练好的模型的属性intercept_查看截距。
  • ★注意:线性回归的原理如下图,所以在计算过程中会用到求逆矩阵的方法,如果一个数据特征数量比数据本身要多(也就是说数据中的列数大于行数),则不构成满秩矩阵,无法求出对应的逆矩阵,因此无法使用线性回归,理解起来比较困难,因此就做简单理解即可。
    机器学习——线性回归_第1张图片

1、应用:

  • 通过线性回归预测糖尿病
  • 数据来源:sklearn中自带
  • 代码
# 导入三件套
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_)



2、应用分析:

  • 讲糖尿病数据中的所有特征全部单独通过线性回归进行训练,就能够明显看出每个特征对预测结果的影响
  • 代码
# 三件套
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)
  • 结果
    机器学习——线性回归_第2张图片

  • 可以发现:bmi这个特征和s5特征通过线性回归模型训练后的得分更高,所以这两个因素是对于结果的影响更大。

  • 上面的作图方式和分析方法是需要掌握的,在进行科技论文写作时,这是很好的表述和分析范例。


你可能感兴趣的:(机器学习与深度学习,机器学习,线性回归,人工智能)