• 线性回归


    线性回归

    导包

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression

    1. 简单演示

    1.1 创建一些有对应关系的散点,使用线性回归推测关系

    1.1.1 创建一些x,指定w和b,按照这个关系求出y,并绘制散点图展示关系

    x = np.arange(0,10,1)
    y = 3*x+4
    plt.scatter(x,y)

    1.1.2 获取机器学习模型,对数据进行学习

    lr = LinearRegression()  # 获取模型
    lr.fit(x.reshape(-1,1),y)  # 训练模型

    1.1.3 获取模型估计出来的斜率和截距,并绘图展示效果

    w_ = lr.coef_  # coefficient 系数 也就是 权重的意思.
    b_ = lr.intercept_  # intercept 截距 也就是 bias
    y_ = w_*x+b_  # 使用估测出来的w和b 求y_
    plt.plot(x,y_)  # 估计值
    plt.scatter(x,y)  # 观测值(真实值)

    来一个具体的案例,使用线性回归来做预测

    2. 糖尿病严重程度预测

    2.1 糖尿病严重程度预测

    from sklearn import datasets # 从datasets中获取糖尿病的数据
    diabetes = datasets.load_diabetes()  # diabetes
    print(diabetes.DESCR) # 查看数据集的描述信息
    
    
    data = diabetes.data  # 特征值
    target = diabetes.target  # 目标值
    feature_names = diabetes.feature_names  # 特征的名字
    pd.DataFrame(data,columns=feature_names)

    预测结果 展示结果

    通过估计各个特征的 权重 来看一下 哪个特征对最终结果的影响更大
    之前的案例 只有一个特征(一个x也就是只有一个权重)
    这个案例 有很多个特征 (会有各自的权重)

    把数据集 分成 训练集 和 测试集(最后40个留着作为测试集)

    # 训练集
    X_train = data[:-40]
    y_train = target[:-40]
    # 测试集
    X_test = data[-40:]
    y_test = target[-40:].
    
    
    # 使用切分好的数据来训练模型 以后去测试
    lr = LinearRegression()
    lr.fit(X_train,y_train)
    w_ = lr.coef_  # 有10个特征 所以 这个有10个权重
    b_ = lr.intercept_
    # y = w1*x1+w2*x2+...+w10*x10+b
    np.dot(X_test[0],w_) + b_
    
    或者:
    y_ = lr.predict(X_test)  # 直接调用predict 传入特征值 就可以得到预测结果

    2.2 绘图研究某一特征和糖尿病严重程度的关系

    只考察 bmi 和 target 之间的关系

    # 只要第二列
    X_train = data[:,2]
    y_train = target
    
    plt.scatter(X_train,y_train)

    lr = LinearRegression()
    lr.fit(X_train.reshape(-1,1),y_train)
    lr.coef_
    lr.intercept_
    X_train.min()
    X_train.max()
    
    
    X_test = np.arange(X_train.min(),X_train.max(),0.01).reshape(-1,1)
    y_ = lr.predict(X_test)
    plt.plot(X_test,y_,color='r')
    plt.scatter(X_train,y_train)
    plt.legend(['predict','real'])
    plt.title('糖尿病和bmi的关系',fontproperties='KaiTi',fontsize=36)

  • 相关阅读:
    JAVA-throw new IOException报错unhandled exception:java.lang.Exception 2021年6月7日
    GIt保持远程 源仓库与Fork仓库同步--2017年6月13日
    Python的getattr()-2017年6月7日
    JavaScript学习-2017年5月18日
    Writing your first Django app--2017年5月9日
    M4-AC6 Oh,Trojan Again--2017年5月9日
    吴军硅谷来信
    【1】Prologue--A Game of Thrones--2017年4月8日
    M4-PC9 Read 10,000 Books,Travel 10,000 Miles--2017年5月8日
    资源分配图RAG的化简
  • 原文地址:https://www.cnblogs.com/louyifei0824/p/10002098.html
Copyright © 2020-2023  润新知