Iris花逻辑回归与实现

Iris花的分类是经典的逻辑回归的代表;但是其代码中包含了大量的python库的核心处理模式,这篇文章就是剖析python代码的文章。

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

关于数据等高线的示例demo:

 1 def height(x, y):
 2   return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
 3
 4 x = np.linspace(-3, 3, 300)
 5 y = np.linspace(-3, 3, 300)
 6 X, Y = np.meshgrid(x, y)
 7 plt.contourf(X, Y, height(X,Y), 10, alpha=0.75, cmap=plt.cm.hot)
 8 C = plt.contour(X, Y, height(X, Y), colors="black")
 9 plt.clabel(C, inline=True, fontsize=10)
10 plt.xticks()
11 plt.yticks()
12 plt.show()

Numpy.c_示例

>>> np.c_[np.array([1,2,3]), np.array([4,5,6])]

array([[1, 4],

[2, 5],

[3, 6]])

>>> np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]

array([[1, 2, 3, 0, 0, 4, 5, 6]])

参考

数据等高线

https://blog.csdn.net/qq_33506160/article/details/78450

关于meshgrid

https://www.cnblogs.com/sunshinewang/p/6897966.html

https://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html

关于ravel

https://blog.csdn.net/liuweiyuxiang/article/details/78220080

https://docs.scipy.org/doc/numpy/reference/generated/numpy.ravel.html

关于numpy.c_

https://docs.scipy.org/doc/numpy/reference/generated/numpy.c_.html

关于coef_和intercept_(虽然我并没有看懂)

https://blog.csdn.net/u010099080/article/details/52933430?utm_source=itdadao&utm_medium=referral

原文地址:https://www.cnblogs.com/xiashiwendao/p/9747197.html

时间: 2024-08-30 04:51:28

Iris花逻辑回归与实现的相关文章

【机器学习】---逻辑回归从初识到应用

一.前述 逻辑回归是一种分类算法,对多元线性回归的结果做一定的缩放.是一种线性(x是一次的)有监督(有x,y)分类(要么是正列,要么是负例)算法. 二.具体 如果最后预测的结果大于0.5 是正例 小于0.5是负例 做分类的误差来源于两种情况: 假设Y是正列 1-p^ 假如本来是1这个类别:预测出来的结果是0.6则预测对了预测的误差是1-0.6=0.4 假如本来是1这个类别:预测出来的结果是0.1 则误差1-0.1=0.9 假设是负例p^ 假设预测出来的是0.1 则误差是0.1 假设预测出来的是0

机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression

技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识,线性回归因为它的简单,易用,且可以求出闭合解,被广泛地运用在各种机器学习应用中.事实上,除了单独使用,线性回归也是很多其他算法的组成部分.线性回归的缺点也是很明显的,因为线性回归是输入到输出的线性变换,拟合能力有限:另外,线性回归的目标值可以是(?∞,+∞),而有的时候,目标值的范围是[0,1](可以表示概率值),那么就不方便了. 逻辑回归可以说是最为常用的机器学习算法之一,最经典的场景就

逻辑回归模型(Logistic Regression)及Python实现

逻辑回归模型(Logistic Regression)及Python实现 http://www.cnblogs.com/sumai 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳性,目标变量是离散的,只有两种取值,通常会编码为0和1.假设我们有一个特征X,画出散点图,结果如下所示.这时候如果我们用线性回归去拟合一条直线:hθ(X) = θ0+θ1X,若Y≥0.5则判断为1,否则为0.这样我们也可以构建出一个模型去进行分类,但是会存在很多的缺点,比如稳健性差.准确率低.而逻辑

R语言数据分析系列之九 - 逻辑回归

R语言数据分析系列之九 -- by comaple.zhang 本节将一下逻辑回归和R语言实现,逻辑回归(LR,LogisticRegression)其实属于广义回归模型,根据因变量的类型和服从的分布可以分为,普通多元线性回归模型,和逻辑回归,逻辑回归是指因变量是离散并且取值范围为{0,1}两类,如果离散变量取值是多项即变为 multi-class classification,所以LR模型是一个二分类模型,可以用来做CTR预测等.那么我们现在来引出逻辑回归如何做二分类问题. 问题引入 在多元线

机器学习之逻辑回归(Logistic Regression)

"""逻辑回归中的Sigmoid函数"""   import numpy as np   import matplotlib.pyplot as plt     def sigmoid(t):   return 1/(1+np.exp(-t))     x=np.linspace(-10,10,500)   y=sigmoid(x)     plt.plot(x,y)   plt.show() 结果: 逻辑回归损失函数的梯度:   逻辑回归算法:

Sklearn实现逻辑回归

方法与参数 LogisticRegression类的各项参数的含义 class sklearn.linear_model.LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class=

机器学习-逻辑回归与线性回归

logistic回归与线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model).这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归.logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释.所以实际中最为常用的就是二分类的logistic回

逻辑回归-6.解决多分类问题

逻辑回归是使用回归的方式,来解决分类问题.之前说过,逻辑回归只能解决二分类问题,为了解决多分类问题,可以使用OVR和OVO方法 OVR(One Vs Rest) 某个分类算法有N类,将某一类和剩余的类比较作为二分类问题,N个类别进行N次分类,得到N个二分类模型,给定一个新的样本点,求出每种二分类对应的概率,概率最高的一类作为新样本的预测结果. OVO(One Vs One) 某个分类算法有N类,将某一类和另一类比较作为二分类问题,总共可分为\(C^2_n\)种不同的二分类模型,给定一个新的样本点

逻辑回归的原理和python实现

输入 鸢尾花卉数据集,数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性. 输出 根据手动实现的逻辑回归模型对鸢尾花卉数据集分类的预测结果. 原理 逻辑回归处理的是分类问题,线性回归处理的是回归问题,这是两者最本质的区别.逻辑回归算法是一种分类算法,适用于标签取值离散的情况. 逻辑回归的模型为: 其中,代表特征向量,代表逻辑函数,一个常用的逻辑函数公式为: 该函数的图像为: 通过公式和图像,我们可以总结下的作用:对于给定的输入变量,根据选择的参数计算输出变量等于1的概率,