QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3929|回复: 0
打印 上一主题 下一主题

[代码资源] 线性回归实例-鸢尾花数据集

[复制链接]
字体大小: 正常 放大

1178

主题

15

听众

1万

积分

  • TA的每日心情
    开心
    2023-7-31 10:17
  • 签到天数: 198 天

    [LV.7]常住居民III

    自我介绍
    数学中国浅夏
    跳转到指定楼层
    1#
    发表于 2021-10-23 20:42 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
                                           文章目录
    0 ^/ m" s7 c: a% F' u4 \4 c一、具体实现步骤5 u# f+ g* ]5 |3 P1 y9 _% d
    1. 导入Iris鸢尾花数据集
    , P) m! o6 D0 q+ k6 V" X) E2. 提取花瓣数据
    1 a5 m0 w+ I9 V( {) u1 F/ |2 C" U7 {3. 拆分数据
      Z5 g3 F7 X* g) {' z) G4. 训练模型
    8 y" @! h& J" q8 _6 E* h二、可视化结果展示# A. S, S3 O1 o
    1. 训练集; P! F( Q0 K3 Q4 q7 q3 O% Y
    2. 测试集
    ) D9 b2 j' ^6 z% G. Z+ N三、相关知识点讲解* J3 n# w  {5 p' O" s$ t: J
    1. train_test_split()函数
    # T+ ?: T6 A1 ~( q* f: q2. LinearRegression()函数4 A: J) m, {' g/ [) O" C" Z
    3. 散点图与折线统计图的绘制9 {4 I% b: h* F" q, z3 b
    这篇文章中,我们要通过鸢尾花的花瓣长度预测花瓣宽度( D  C$ Y) i2 I  |& H
    ! r+ P8 W# j' s2 L/ R( y1 T
    , L  q* E: x8 W# u
    环境:Python3.6.5
      d7 Z# N4 P$ w5 j+ @$ ~! z; I+ s编译器:jupyter notebook
    5 R: k: {2 f, u" R2 ^7 B
    4 o. q2 u9 ^4 J4 _4 L一、具体实现步骤" x' E% \, P# _$ P2 \/ Q: }) @
    1. 导入Iris鸢尾花数据集
    ! t. s  K. @5 |1 J( ]8 yIris鸢尾花数据集共有150条记录,分别是:
    9 h  o, f& j. ]( i% U+ k) g50条山鸢尾 (Iris-setosa)
    7 l3 _) E7 \1 [  A50条变色鸢尾(Iris-versicolor)
    2 Q. v5 H- Q. C, z$ Z0 j3 z50条维吉尼亚鸢尾(Iris-virginica)3 c  r' q+ ], \& k
    url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"  + H% ?& D) K4 z  W% Y1 @
    names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class']  
    6 C/ j& A% u8 w$ P9 \- O9 ^" Qdataset = pd.read_csv(url, names=names)
    0 }! M0 @" z; `8 E$ A
    - D% t; w) y4 o* T8 C4 C+ b2. 提取花瓣数据. o  d+ A  r+ V
    下面我们提取数据集中花瓣宽度与花瓣长度数据,将花瓣数据分为训练数据与测试数据,训练数据用于训练线性回归模型,测试数据用于检测我们的模型的准确率。1 p- w0 Q1 S3 @2 U) y# O  r

    ( p( R2 ~8 u2 ]$ m/ F- x

    8 U  S+ l2 ?0 c- ^1 q最终我们要达到的效果是:输入花瓣宽度,通过模型预测花瓣宽度。+ K$ V; e( W+ o5 s( M) H2 h' j

    , B5 h# h; S1 `7 Q4 ]' a$ I
    1 ~4 j6 ?3 H" r! I( D/ R0 }. P2 S; V
    X = dataset["花瓣-length"]! ?9 a* @! v: j% o5 W
    Y = dataset["花瓣-width"]( S! ?' P  u: \' v4 f" t0 Z
    X = X.reshape(len(X),1)! l! k6 b' g+ q6 `* P! g* @
    Y = Y.reshape(len(Y),1)  i$ l' L! G& O( n) ]% `. {( U

    0 z6 J% K' H) P' w/ M1 c, c1 o6 x3. 拆分数据
    - E8 a4 q. _. D3 w  Q7 |将数据集拆分数据集成训练集、测试集9 i! t5 l1 O  k8 `
    " l; n5 i1 q, u9 W0 Y
    8 V0 w' h1 O7 _7 ^# C7 l
    from sklearn.model_selection import train_test_split' v: y. U8 @9 D1 i3 J
    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)
    5 a1 W- g. s( A" ~
      D* A; a9 s7 y( a6 C4. 训练模型
    + e. p" ~5 ~! h- r这里我们需要将我们的训练数据喂给模型进行训练。
    5 u  |% A$ E. G
    - X  |  T3 ^/ x- x. n; Y" {

    4 ]6 Z4 V& m' \) xfrom sklearn.linear_model import LinearRegression: H( y+ S" q5 Y9 l+ Q8 _2 z
    regressor = LinearRegression(): ^; H5 X, h! s4 R7 E
    regressor = regressor.fit(X_train, Y_train)
    & c, M- N  s6 _% G: N/ Z! T/ |5 ~8 a; y6 Q1 [. R8 l3 a
    二、可视化结果展示; l7 M  @8 o3 I0 E, C' J
    1. 训练集
    - y" ^1 f( J. Z5 }3 M, |' C' j4 [将训练集中每一朵花的花瓣数据与线性回归模型预测的结果放到同一张统计图中。
    # v$ p* r/ i2 x" B/ H; z
    0 c5 a$ l4 J9 f9 {8 N

    " k  n4 Q  _& h6 p3 K8 G, D: M* t$ ?& ~import matplotlib.pyplot as plt
    ' d4 N! r8 c: e  I1 [' v0 G/ e2 I- A3 N7 Z+ G. A7 A; X
    6 O+ c9 x6 P, B% E3 @8 `" x- n+ T
    plt.scatter(X_train, Y_train, color='red'): v' l; z, P  V" T8 d7 S
    plt.plot(X_train, regressor.predict(X_train), color='green')1 W0 y9 J/ Z9 W2 _% i8 c% H7 [
    plt.xlabel("Iris-length")
    6 L, q3 v$ P& x. d6 Y9 i. {plt.ylabel("Iris-width")
    6 k: E6 h, s0 j4 q" M" o) x; Gplt.title("This is train dataset-kzb")
    5 b( z# E) T% I1 D" p; S, y8 pplt.show()
    . O; S; q/ w& o. f4 P; n' g: V$ P* J$ O2 {9 ]
    红色的点是训练数据集中的花瓣数据,我们不难看出花瓣长度与宽度是一个线性关系,绿色的线是我们模型拟合的结果。7 x% F) {7 J' d" e* k7 h( L7 k" j

    * L7 G* T  M, a; ]1 V  m6 X3 w9 _  B4 t2 \" E+ B# D2 [

    ( z! n) |* Q, O$ C# n- U% g2. 测试集
    , d) y# t$ w+ W. H$ ]% i1 `* o将测试集中每一朵花的花瓣数据与线性回归模型预测的结果放到同一张统计图中。# G! v, w( x' P% @3 i% ?- U/ B3 x
    3 r3 X5 ]3 t4 |% k2 i: `
    ! {, Q" D3 \# t& M0 X8 i
    plt.scatter(X_test, Y_test, color='blue')
    % I; ~) ]/ ]  F4 {9 Oplt.plot(X_train, regressor.predict(X_train), color='green')0 S! J+ }  a, z8 H: c) ?7 {$ f
    plt.xlabel("Iris-length")
    . ]( W( ~) {3 O4 l: t) [plt.ylabel("Iris-width")
    2 @0 _2 `% f/ _: mplt.title("This is test dataset-kzb")$ S5 g# t' o3 o* U5 Z
    plt.show()
    % A0 X* [3 c9 z: q" O% C) k+ f6 n# u
    绿色的点是测试数据集中的花瓣数据,我们可以看出这部分数据也是符合线性关系的,随着集的增大,线性关系会更加明显。
    $ w+ Q1 B$ R6 o& L; h: T# U7 m! ?. g3 A: ^1 j; P

    : U9 d8 F, l! ^' k

    & K9 b( h7 l! n0 x6 A( s三、相关知识点讲解- K3 S- o0 r/ F# c
    1. train_test_split()函数
    * K2 `  N/ w' o7 H- o* _train_test_split():将数据集划分为测试集与训练集。% P3 Z" n1 O0 M/ A; G) W
    , L2 M; h: H* L) o7 a8 u7 G" {

    ; }! U5 m; b8 Q# @. U# ~4 oX:所要划分的整体数据的特征集;
    9 k( z6 t  f( {5 z( D1 P8 p5 T/ UY:所要划分的整体数据的结果;' Q9 A  X. B$ \$ l2 N( r; E
    test_size:测试集数据量在整体数据量中的占比(可以理解为X_test与X的比值);" @3 W, ]8 j9 a
    random_state:①若不填或者填0,每次生成的数据都是随机,可能不一样。②若为整数,每次生成的数据都相同;4 J; E4 p$ u( W! n% L6 ~0 ^: l
    from sklearn.model_selection import train_test_split
    0 I5 L6 U9 l/ Q' sX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)9 O- m; h2 a7 [/ d2 }

    - P  V, ?/ v& c: D. |0 _4 c( T2. LinearRegression()函数3 J( E/ _8 I  ~) o9 u- q
    sklearn.linear_model包实现了广义线性模型,包括线性回归、Ridge回归、Bayesian回归等。LinearRegression是其中较为简单的线性回归模型。/ N" g( @: v$ Q2 v$ r9 Y; z

    % ]& u9 p4 a) y: f, I: |6 p3 N
    - z) N$ \$ C! @
    解释一下什么是回归:回归最简单的定义是,给出一个点集D,用一个函数去拟合这个点集,并且使得点集与拟合函数间的误差最小,如果这个函数曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归。0 B/ o3 `' ]: k" H# {) \1 Q( s( R

    - }: C3 M! N; W/ m

    . I4 J) [2 ?4 f  ^/ K! |5 v3. 散点图与折线统计图的绘制7 K* K8 \( ~: m9 Q; N
    plt.scatter():绘画出数据的散点图
    - V- D' \* d- Q3 `$ S" I# [plt.plot():绘画出依据模型(LinearRegression的线性回归模型)生成的直线
    4 z; C! L) s: Z) E- M. W有问题请加我QQ3243710560) M; X; g* O( L4 n6 Q

    , e' ?& ~$ }7 d6 L( ^( a0 z0 t
    : ^( @! ^: H2 C" S& p
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-16 21:03 , Processed in 0.416427 second(s), 50 queries .

    回顶部