标题: 线性回归实例-鸢尾花数据集 [打印本页] 作者: 1047521767 时间: 2021-10-23 20:42 标题: 线性回归实例-鸢尾花数据集 文章目录! }" B. d0 _: C/ Z! ^$ ]( v/ K+ B
一、具体实现步骤( o+ f5 V7 U- v! g. V6 [6 T$ K
1. 导入Iris鸢尾花数据集5 l" q/ F9 X1 G& J
2. 提取花瓣数据 5 }; b7 Y7 e$ p$ U" i8 w3. 拆分数据+ m3 |3 T9 u' _2 e
4. 训练模型 3 \. x* i0 m4 P" b5 r二、可视化结果展示5 t7 I5 N; X( h# P. C6 u
1. 训练集 2 K+ T6 E- b: e2 v2. 测试集 ! i0 a# h8 Q, t& Y三、相关知识点讲解) D* E+ I, B* y2 X0 k3 u
1. train_test_split()函数9 ?6 \# P- v. K
2. LinearRegression()函数( b* ~: i, }( r- q# I3 M
3. 散点图与折线统计图的绘制$ H5 u! F- o! Q% v6 M1 _
这篇文章中,我们要通过鸢尾花的花瓣长度预测花瓣宽度2 ]( \5 M. J0 f1 O/ ^
' U. y1 B- F, t0 Q) `5 ]8 ~/ S
# N! N1 d4 ]5 k. p
环境:Python3.6.59 M' Y3 ?7 k$ |" |/ A; K# |/ B
编译器:jupyter notebook 2 V' ?& y; {9 r1 ~- p0 M- E s: m2 G9 E& D9 r
一、具体实现步骤 ) U" E m0 g5 P9 ~1 P! l. b: F+ B1. 导入Iris鸢尾花数据集 & Y' B* ] {& @6 w2 K4 D+ ]Iris鸢尾花数据集共有150条记录,分别是:8 T- i1 ?, n$ E9 L
50条山鸢尾 (Iris-setosa)" ]) V6 `& ?1 l H7 C
50条变色鸢尾(Iris-versicolor) 0 D) ?# I( O& J9 X0 Y. V) k50条维吉尼亚鸢尾(Iris-virginica)6 ^0 E! Q" U9 j. W! R& x9 b
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data" - C6 h" D8 R1 k9 j
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class'] 4 ~) ^" |4 C# d& A
dataset = pd.read_csv(url, names=names)$ I7 I: l( s/ i7 H& _; |9 l& Z
* o( c5 y) Y, u
2. 提取花瓣数据6 j5 a" D, Q& X
下面我们提取数据集中花瓣宽度与花瓣长度数据,将花瓣数据分为训练数据与测试数据,训练数据用于训练线性回归模型,测试数据用于检测我们的模型的准确率。0 G- N) }. n1 s7 J
* Z/ E) P& V: ]' n; b
9 Z1 V$ r" Q0 |$ N
最终我们要达到的效果是:输入花瓣宽度,通过模型预测花瓣宽度。2 ~1 T% Q4 K5 B6 f% ?- t
' M! X9 V a' y. P) _( k " N- V/ q4 U [* {X = dataset["花瓣-length"]* x ~ \( ~0 @4 k" k. m& D* _
Y = dataset["花瓣-width"]# N8 W4 j7 ]) ]0 u+ O, G1 j! W
X = X.reshape(len(X),1) . x0 ^: m# R5 U( r. MY = Y.reshape(len(Y),1)* x& k {# F# J0 e2 S
8 {( x7 o" }' L* ?' M) p/ d
3. 拆分数据 * m3 U* J3 x3 C6 H% p' J将数据集拆分数据集成训练集、测试集4 C6 [7 j: f( V4 }' g9 g4 `! u
0 Y4 g0 m7 c3 N7 d) i. \: n 5 h( c) `& A- q/ O- Afrom sklearn.model_selection import train_test_split - u0 G, ?+ R7 J5 w) V* Q+ h5 bX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0) $ M4 I R3 {" ^0 R 2 S, x) W4 T! Z( {* ^- Y8 h4. 训练模型 4 K; e/ V0 H* l/ K. k8 U/ D这里我们需要将我们的训练数据喂给模型进行训练。' z' i4 J( x: [! W
' Y7 X7 K8 X7 _6 f2 R
4 X& V" Q7 r- k3 [, L
from sklearn.linear_model import LinearRegression, i2 S, Y' c" Q; W
regressor = LinearRegression() . R6 F' Y5 o; _regressor = regressor.fit(X_train, Y_train): z" c# \( G6 N6 i; c2 `
2 |2 i% \. T. b8 |/ D6 r# Z! W+ J
二、可视化结果展示 " ~2 _ \. x* s2 }; L( O6 O* S1. 训练集- e& f6 t* i: x" O! }5 w' v
将训练集中每一朵花的花瓣数据与线性回归模型预测的结果放到同一张统计图中。8 c) v* K$ c. B5 `( X" X
. u, n7 C6 T" u6 F. J
) S+ w2 V2 @& s o+ v
import matplotlib.pyplot as plt. X- h, R" G& N" `0 {7 X7 G7 d5 ]. J$ a
" |9 E$ m. @. @
8 ]; D ]% F7 p! j: t+ f- j0 aplt.scatter(X_train, Y_train, color='red')' p& c8 k" h! {
plt.plot(X_train, regressor.predict(X_train), color='green') # m5 \; ]! Z! y* |3 ~* q& Tplt.xlabel("Iris-length") 0 l/ g! N. o1 I: O, }- t: U0 T/ O: R
plt.ylabel("Iris-width") 2 h% ^' F. E: V6 p
plt.title("This is train dataset-kzb") 9 B+ p8 }( `) i& |plt.show() 9 ~4 v" K$ k; @' R) S- K. k8 q$ ~+ r! ^
红色的点是训练数据集中的花瓣数据,我们不难看出花瓣长度与宽度是一个线性关系,绿色的线是我们模型拟合的结果。" b% `1 O0 t: _8 ^( d : g: Z- l4 i9 U | $ f) |. T9 Y: M* e' C( M 9 p7 C/ R+ U9 E2. 测试集$ G8 b! A1 X" y: y$ _0 [
将测试集中每一朵花的花瓣数据与线性回归模型预测的结果放到同一张统计图中。 & a, U2 u& w' D/ j' F% Z' S; `/ w- r v r
5 H7 u' @$ w: ~1 Z
plt.scatter(X_test, Y_test, color='blue') ' v4 D( m) `7 \+ k: Splt.plot(X_train, regressor.predict(X_train), color='green') 3 }' {+ I- e. cplt.xlabel("Iris-length") ; l1 H' ]0 e4 C. u" O& t& eplt.ylabel("Iris-width") ' `, m' k0 s- ]3 z- C) e+ V
plt.title("This is test dataset-kzb")% [0 [; k |4 ^8 G9 |5 [! }; ]8 T
plt.show() , f; R+ i% t5 M/ i7 ]- t * n$ B6 W( f4 d: ^4 i% p8 R, |绿色的点是测试数据集中的花瓣数据,我们可以看出这部分数据也是符合线性关系的,随着集的增大,线性关系会更加明显。 8 k H. h0 {) x5 N: A2 w. \, D9 k( q, o: ], Q
/ |4 a, ~$ ]# j4 K( y