py:ai第七课:LogisticRegression的等高线画法

 

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
import numpy as npiris = datasets.load_iris()
# http://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html
# 取用下标为2,3的两个feture,分别是花的宽度和长度;
# 第一个维度取“:”代表着所有行,第二个维度代表列范围,这个参数模式其实和reshape很像
X = iris["data"][:, (2, 3)]
y = (iris["target"] == 2).astype(np.int)  # 分类做了数字转化,如果是Iris,ture,则强转为整型1,false则强转为0
log_reg = LogisticRegression(C=10 ** 10)  # 设定C值,C代表精度,是控制外形边缘的准确度,值越大,则精度越高
log_reg.fit(X, y)  # 对于数据进行学习,获取模型参数,比如coef,intercepted等
# meshgrid是将参数中p1和p2进行坐标转换,下面将会详细介绍
# np.linspace则是将2.9到7等分500份,reshape(-1,1)代表行数根据实际情况,列数为1
x0, x1 = np.meshgrid(np.linspace(2.9, 7, 500).reshape(-1, 1),np.linspace(0.8, 2.7, 200).reshape(-1, 1))
# raval和flatter意义很类似,只不过raval返回的引用,对于返回值的修改将会影响到原始数据(x0,x1),后者则返回copy,和原始数据无关
# 关于np.c_则是实现了数组的融合,下面有具体的示例
X_new = np.c_[(x0.ravel(), x1.ravel())]
# 回归的predic只是返回预测值(返回所有分类中最大的那个),predict_proba则是返回所有类别的预测值
y_probe = log_reg.predict_proba(X_new)
plt.figure(figsize=(10, 4))
# 这个X[y==0, 0]表达的意思比较复杂,代表的是y值是0的对应X值,这个说法完美解释了X[y==0],那么X[y==0, 0]的涵义就是X值的第一个特征值,
#    类似的X[y == 0, 1]
# 代表X值的第二个特征值;从题头可以获知X是两个特征元组集合,第一个代表宽度,第二个代表长度;
plt.plot(X[y == 0, 0], X[y == 0, 1], "bs")
plt.plot(X[y == 1, 0], X[y == 1, 1], "g^")
zz = y_probe[:, 1].reshape(x0.shape)
# contour的意思是等高线(下面有详细的介绍)
contour = plt.contour(x0, x1, zz, cmap=plt.cm.brg)
plt.clabel(contour, inline=1, fontsize=12)left_right = np.array([2.9, 7])
# 这个公式确实不知道是怎么来的,boundary的获取为什么是这个公式?
boundary = -(log_reg.coef_[0][0] * left_right + log_reg.intercept_[0]) / log_reg.coef_[0][1]
plt.plot(left_right, boundary, "k--", linewidth=3)
plt.text(3.2, 1.5, "Not iris", fontsize=14, color="b", ha="center")
plt.text(6.5, 2.25, "iris", fontsize=14, color="g", ha="center")
plt.axis([2.9, 7, 0.8, 2.7])
plt.show()

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部