对鸢尾花数据集中的petal-length和petal-width两列数据进行回归分析
首先,导入相关包和数据。
# 导库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 数据及模型
from sklearn.datasets import load_iris
from sklearn.linear_model import LinearRegression
%matplotlib inline
# 导入数据集
iris = load_iris()
data = pd.DataFrame(iris.data)
data.columns = ['sepal-length','sepal-width','petal-length','petal-width']
data.head()
# data.shape
输出如下表:
sepal-length | sepal-width | petal-length | petal-width | |
---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 |
1 | 4.9 | 3.0 | 1.4 | 0.2 |
2 | 4.7 | 3.2 | 1.3 | 0.2 |
3 | 4.6 | 3.1 | 1.5 | 0.2 |
4 | 5.0 | 3.6 | 1.4 | 0.2 |
对数据集中的petal-length和petal-width两列数据进行回归分析
# 处理数据
x = data['petal-length'].values
y = data['petal-width'].values
x = x.reshape(len(x),1)
y = y.reshape(len(y),1)
# 使用scikit-learn完成一元线性回归
clf = LinearRegression()
clf.fit(x,y)
pre = clf.predict(x)
# 可视化
plt.scatter(x,y,s = 50)
plt.plot(x,pre,'r-',linewidth = 2)
plt.xlabel('petal-length')
plt.ylabel('petal-width')
for idx,m in enumerate(x):
plt.plot([m,m],[y[idx],pre[idx]],'g-')
plt.show()
输出结果如下图:
显示回归线的参数
# 回归线参数
print(u"系数",clf.coef_)
print(u"截距",clf.intercept_)
print(np.mean(y-pre)**2)
输出:
系数 [[0.41575542]]
截距 [-0.36307552]
1.013248007150544e-32
输入花萼长度,预测其花萼宽度
#对花萼长度为3.9的花,预测其花萼宽度
print(clf.predict([[3.9]]))
输出:
[[1.2583706]]