02-15 Logistic回归(鸢尾花分类)

目录

  • Logistic回归(鸢尾花分类)
  • 一、导入模块
  • 二、获取数据
  • 三、构建决策边界
  • 四、训练模型
    • 4.1 C参数与权重系数的关系
  • 五、可视化

更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/

Logistic回归(鸢尾花分类)

一、导入模块

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from matplotlib.font_manager import FontProperties
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')

二、获取数据

iris_data = datasets.load_iris()
X = iris_data.data[:, [2, 3]]
y = iris_data.target
label_list = ['山鸢尾', '杂色鸢尾', '维吉尼亚鸢尾']

三、构建决策边界

def plot_decision_regions(X, y, classifier=None):
    marker_list = ['o', 'x', 's']
    color_list = ['r', 'b', 'g']
    cmap = ListedColormap(color_list[:len(np.unique(y))])

    x1_min, x1_max = X[:, 0].min()-1, X[:, 0].max()+1
    x2_min, x2_max = X[:, 1].min()-1, X[:, 1].max()+1
    t1 = np.linspace(x1_min, x1_max, 666)
    t2 = np.linspace(x2_min, x2_max, 666)

    x1, x2 = np.meshgrid(t1, t2)
    y_hat = classifier.predict(np.array([x1.ravel(), x2.ravel()]).T)
    y_hat = y_hat.reshape(x1.shape)
    plt.contourf(x1, x2, y_hat, alpha=0.2, cmap=cmap)
    plt.xlim(x1_min, x1_max)
    plt.ylim(x2_min, x2_max)

    for ind, clas in enumerate(np.unique(y)):
        plt.scatter(X[y == clas, 0], X[y == clas, 1], alpha=0.8, s=50,
                    c=color_list[ind], marker=marker_list[ind], label=label_list[clas])

四、训练模型

# C与正则化参数λ成反比,即减小参数C增大正则化的强度
# lbfgs使用拟牛顿法优化参数
# 分类方式为OvR(One-vs-Rest)
lr = LogisticRegression(C=100, random_state=1,
                        solver='lbfgs', multi_class='ovr')
lr.fit(X, y)
LogisticRegression(C=100, class_weight=None, dual=False, fit_intercept=True,
          intercept_scaling=1, max_iter=100, multi_class='ovr',
          n_jobs=None, penalty='l2', random_state=1, solver='lbfgs',
          tol=0.0001, verbose=0, warm_start=False)

4.1 C参数与权重系数的关系

weights, params = [], []
for c in np.arange(-5, 5):
    lr = LogisticRegression(C=10.**c, random_state=1,
                            solver='lbfgs', multi_class='ovr')
    lr.fit(X, y)

    # lr.coef_[1]拿到类别1的权重系数
    weights.append(lr.coef_[1])
    params.append(10.**c)

# 把weights转为numpy数组,即包含两个特征的权重的数组
weights = np.array(weights)
'''
params:
[1e-05, 0.0001, 0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0, 10000.0]
'''
'''
weights:
[[ 2.50572107e-04  6.31528229e-05]
 [ 2.46565843e-03  6.15303747e-04]
 [ 2.13003731e-02  4.74899392e-03]
 [ 9.09176960e-02 -1.80703318e-03]
 [ 1.19168871e-01 -2.19313511e-01]
 [ 8.35644722e-02 -9.08030470e-01]
 [ 1.60682631e-01 -2.15860167e+00]
 [ 5.13026897e-01 -2.99137299e+00]
 [ 1.14643413e+00 -2.79518356e+00]
 [ 1.90317264e+00 -2.26818639e+00]]
'''

plt.plot(params, weights[:, 0], linestyle='--', c='r', label='花瓣长度(cm)')
plt.plot(params, weights[:, 1], c='g', label='花瓣长度(cm)')
plt.xlabel('C')
# 改变x轴的刻度
plt.xscale('log')
plt.ylabel('权重系数', fontproperties=font)
plt.legend(prop=font)
plt.show()

上图显示了10个不同的逆正则化参数C值拟合逻辑回归模型,此处只收集标签为1(杂色鸢尾)的权重系数。由于数据没有经过处理,所以显示的不太美观,但是总体趋势还是可以看出减小参数C会增大正则化强度,在\(10^{-3}\)的时候权重系数开始收敛为0。

五、可视化

plot_decision_regions(X, y, classifier=lr)
plt.xlabel('花瓣长度(cm)', fontproperties=font)
plt.ylabel('花瓣宽度(cm)', fontproperties=font)
plt.legend(prop=font)
plt.show()

原文地址:https://www.cnblogs.com/nickchen121/p/11686750.html

时间: 2024-08-30 11:55:23

02-15 Logistic回归(鸢尾花分类)的相关文章

机器学习之logistic回归与分类

logistic回归与分类是一种简单的分类算法.在分类的过程中只需要找到一个划分不同类的权重向量即可,对新的数据只需要乘上这个向量并比较就可以得到分类.比如下图的二分类问题: 每个样本点可以看成包含两个特征(x1,x2),现在需要把他们分开,如果这是训练集,他们本身属于哪一个类是已知的,比如说蓝色的属于0类,红色的属于1类,现在我们想通过这些数据建立一个分类标准可以将他们分开,这样再来了一个不知道类别的数据,我们看看这个标准就知道他是属于哪一类的. 像上面这个线性的,那么我们可以建立一个函数模型

logistic回归用作分类的讲义

这是我之前讲专题的一个ppt,因为不知道怎么传ppt.所以以图片形式上传,用作备忘.

《机器学习实战》学习笔记:Logistic回归&预测疝气病证的死亡率

前言: 生活中,人们经常会遇到各种最优化问题,比如如何在最短时间从一个地点到另外一个地点?如何在投入最少的资金而却能得到最高的受益?如何设计一款芯片使其功耗最低而性能最好?这一节就要学习一种最优化算法--Logistic回归,设计最优化算法的目的依然是用于分类.在这里,Logistic回归的主要思想是根据现有的数据对分类边界线建立回归公式,达到分类的目的.假设我们有一堆数据,需要划一条线(最佳直线)对其分类,这就是Logistic回归的目的. 而"Logistic回归"中的"

机器学习笔记04:逻辑回归(Logistic regression)、分类(Classification)

之前我们已经大概学习了用线性回归(Linear Regression)来解决一些预测问题,详见: 1.<机器学习笔记01:线性回归(Linear Regression)和梯度下降(Gradient Decent)> 2.<机器学习笔记02:多元线性回归.梯度下降和Normal equation> 3.<机器学习笔记03:Normal equation及其与梯度下降的比较> 说明:本文章所有图片均属于Stanford机器学课程,转载请注明出处 面对一些类似回归问题,我们可

初识分类算法(4)-----logistic回归

参考:http://blog.csdn.net/dongtingzhizi/article/details/15962797 1.简述 在线性回归中,h函数的输出值为连续值,当需要进行归类时,输出的应该是离散值,如何将连续值转换成离散值? 如果分类结果只有两个,用1,0表示.我们希望有:函数1/(1+e^(-z)),这样就可以将函数结果限定在0~1之间. Logistic Regression 有三个主要组成部分:回归.线性回归.Logsitic方程. 1)回归其实就是对已知公式的未知参数进行估

SPSS数据分析—多分类Logistic回归模型

前面我们说过二分类Logistic回归模型,但分类变量并不只是二分类一种,还有多分类,本次我们介绍当因变量为多分类时的Logistic回归模型. 多分类Logistic回归模型又分为有序多分类Logistic回归模型和无序多分类Logistic回归模型 一.有序多分类Logistic回归模型 有序多分类Logistic回归模型拟合的基本方法是拟合因变量水平数-1个Logistic回归模型,也称为累积多分类Logit模型,实际上就是将因变量依次分割成两个等级,对这两个等级建立二分类Logistic

Logistic回归 python实现

Logistic回归 算法优缺点: 1.计算代价不高,易于理解和实现2.容易欠拟合,分类精度可能不高3.适用数据类型:数值型和标称型 算法思想: 其实就我的理解来说,logistic回归实际上就是加了个sigmoid函数的线性回归,这个sigmoid函数的好处就在于,将结果归到了0到1这个区间里面了,并且sigmoid(0)=0.5,也就是说里面的线性部分的结果大于零小于零就可以直接计算到了.这里的求解方式是梯度上升法,具体我就不扯了,最推荐的资料还是Ng的视频,那里面的梯度下降就是啦,只不过一

Logistic回归python实现

2017-08-12 Logistic 回归,作为分类器: 分别用了梯度上升,牛顿法来最优化损失函数: 1 # -*- coding: utf-8 -*- 2 3 ''' 4 function: 实现Logistic回归,拟合直线,对数据进行分类: 5 利用梯度上升,随机梯度上升,改进的随机梯度上升,牛顿法分别对损失函数优化: 6 这里没有给出最后测试分类的函数: 7 date: 2017.8.12 8 ''' 9 10 from numpy import * 11 12 #从文件加载处理数据

SPSS—回归—二元Logistic回归案例分析

数据分析真不是一门省油的灯,搞的人晕头转向,而且涉及到很多复杂的计算,还是书读少了,小学毕业的我,真是死了不少脑细胞, 学习二元Logistic回归有一段时间了,今天跟大家分享一下学习心得,希望多指教! 二元Logistic,从字面上其实就可以理解大概是什么意思,Logistic中文意思为"逻辑"但是这里,并不是逻辑的意思,而是通过logit变换来命名的,二元一般指"两种可能性"就好比逻辑中的"是"或者"否"一样, Logis