使用逻辑回归预测鸢尾花种类
Making Predictions on iris species with logisitc regression
我有一个给定的代码,它根据花瓣长度和花瓣宽度告诉你鸢尾花数据集中的鸢尾花是否是 iris vireginica。但是我该如何预测一朵全新的花呢?
%matplotlib inline
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt
iris = datasets.load_iris()
from sklearn.linear_model import LogisticRegression
X = iris["data"][:, (2, 3)] # petal length, petal width
y = (iris["target"] == 2).astype(np.int)
log_reg = LogisticRegression(C=10**10, random_state=42)
log_reg.fit(X, y)
x0, x1 = np.meshgrid(
np.linspace(2.9, 7, 500).reshape(-1, 1),
np.linspace(0.8, 2.7, 200).reshape(-1, 1),
)
X_new = np.c_[x0.ravel(), x1.ravel()]
y_proba = log_reg.predict_proba(X_new)
plt.figure(figsize=(10, 4))
plt.plot(X[y==0, 0], X[y==0, 1], "bs")
plt.plot(X[y==1, 0], X[y==1, 1], "g^")
zz = y_proba[:, 1].reshape(x0.shape)
contour = plt.contour(x0, x1, zz, cmap=plt.cm.brg)
left_right = np.array([2.9, 7])
boundary = -(log_reg.coef_[0][0] * left_right + log_reg.intercept_[0]) / log_reg.coef_[0][1]
plt.clabel(contour, inline=1, fontsize=12)
plt.plot(left_right, boundary, "k--", linewidth=3)
plt.text(3.5, 1.5, "Not Iris-Virginica", fontsize=14, color="b", ha="center")
plt.text(6.5, 2.3, "Iris-Virginica", fontsize=14, color="g", ha="center")
plt.xlabel("Petal length", fontsize=14)
plt.ylabel("Petal width", fontsize=14)
plt.axis([2.9, 7, 0.8, 2.7])
plt.show()
现在假设我有一朵新花,我测量:
- 萼片长度:4.8
- 萼片宽度:2.5
- 花瓣长度:5.3
- 花瓣宽度:2.4
当我尝试跟随预测时,我收到一条错误消息:
ValueError:X 每个样本有 1 个特征;期待 2
log_reg.predict([[5.3], [2.4]])
所以我的问题是,我如何在这里正确预测新花及其种类?
predict
方法的文档说明输入参数的形状应为 (n_samples, n_features)
,即此处为 1x2,而您的输入为 2x1。试试这个:
log_reg.predict([[5.3, 2.4]])
我有一个给定的代码,它根据花瓣长度和花瓣宽度告诉你鸢尾花数据集中的鸢尾花是否是 iris vireginica。但是我该如何预测一朵全新的花呢?
%matplotlib inline
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt
iris = datasets.load_iris()
from sklearn.linear_model import LogisticRegression
X = iris["data"][:, (2, 3)] # petal length, petal width
y = (iris["target"] == 2).astype(np.int)
log_reg = LogisticRegression(C=10**10, random_state=42)
log_reg.fit(X, y)
x0, x1 = np.meshgrid(
np.linspace(2.9, 7, 500).reshape(-1, 1),
np.linspace(0.8, 2.7, 200).reshape(-1, 1),
)
X_new = np.c_[x0.ravel(), x1.ravel()]
y_proba = log_reg.predict_proba(X_new)
plt.figure(figsize=(10, 4))
plt.plot(X[y==0, 0], X[y==0, 1], "bs")
plt.plot(X[y==1, 0], X[y==1, 1], "g^")
zz = y_proba[:, 1].reshape(x0.shape)
contour = plt.contour(x0, x1, zz, cmap=plt.cm.brg)
left_right = np.array([2.9, 7])
boundary = -(log_reg.coef_[0][0] * left_right + log_reg.intercept_[0]) / log_reg.coef_[0][1]
plt.clabel(contour, inline=1, fontsize=12)
plt.plot(left_right, boundary, "k--", linewidth=3)
plt.text(3.5, 1.5, "Not Iris-Virginica", fontsize=14, color="b", ha="center")
plt.text(6.5, 2.3, "Iris-Virginica", fontsize=14, color="g", ha="center")
plt.xlabel("Petal length", fontsize=14)
plt.ylabel("Petal width", fontsize=14)
plt.axis([2.9, 7, 0.8, 2.7])
plt.show()
现在假设我有一朵新花,我测量:
- 萼片长度:4.8
- 萼片宽度:2.5
- 花瓣长度:5.3
- 花瓣宽度:2.4
当我尝试跟随预测时,我收到一条错误消息: ValueError:X 每个样本有 1 个特征;期待 2
log_reg.predict([[5.3], [2.4]])
所以我的问题是,我如何在这里正确预测新花及其种类?
predict
方法的文档说明输入参数的形状应为 (n_samples, n_features)
,即此处为 1x2,而您的输入为 2x1。试试这个:
log_reg.predict([[5.3, 2.4]])