机器学习二(线性回归和Logistic回归)

前言

由于本部分内容讲解资源较多,本文不做过多叙述,重点放在实际问题的应用上。

一、线性回归

线性回归中的线性指的是对于参数的线性的,对于样本的特征不一定是线性的。

线性模型(矩阵形式):y=XA+e

其中:A为参数向量,y为向量,X为矩阵,e为噪声向量。

对于线性模型,通常采用最小二乘法作为其解法(可通过最大似然估计推得)。

最小二乘法是通过最小化误差的平方和寻找数据的最佳函数匹配。

最小二乘法的解法有很多种,通常有:

解析法即求通过函数的导数为0确定函数的极值点

矩阵法-——解析法的矩阵形式

梯度下降法:在求解损失函数的最小值时,可以通过梯度下降来一步步的迭代求解,得到最小化的损失函数和模型参数值。

常见的方式有三种,分别是:批量梯度下降法BGD、随机梯度下降法SGD、小批量梯度下降法MBGD。

其他优化算法,如牛顿法等。

为避免过拟合,通常在线性回归模型中加入正则项,分为以下三类:

二、Logistic回归

sigmoid函数: y=1/(1+exp(-x))

模型:

假设 P(y=1|x;θ)=hθ(x)

最大似然估计方法(损失函数)

通过梯度下降法得到

softmax回归(多目标分类)

三、实践练习

数据集采用sklearn自带数据集 Boston ,由房屋的特征预测房屋的价格。

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn.linear_model import Lasso, Ridge
from sklearn.model_selection import GridSearchCV

dataset=datasets.load_boston()

X=dataset.data
Y=dataset.target

#X_norm=StandardScaler().fit_transform(X)
X_norm=X #是否标准化对值没有影响,这也是可以解释的
x_train, x_test, y_train, y_test = train_test_split(X_norm, Y, train_size=0.7, random_state=0)

model1 = LinearRegression()
model1.fit(x_train,y_train)
print(model1)
print(model1.coef_, model1.intercept_)

#model2 = Ridge()
model2=Lasso()
alpha_can = np.logspace(-3, 2, 10)
lasso_model = GridSearchCV(model2, param_grid={‘alpha‘:alpha_can}, cv=5)
lasso_model.fit(x_train, y_train)
print(‘超参数:\n‘, lasso_model.best_params_)

order = y_test.argsort(axis=0)  #对测试样本排序,便于显示
y_test = y_test[order]
x_test = x_test[order, :]

y_hat1=model1.predict(x_test)
mse1 = np.average((y_hat1 - np.array(y_test)) ** 2)
print(‘MSE-LR = ‘, mse1)

y_hat2=lasso_model.predict(x_test)
mse2 = np.average((y_hat2 - np.array(y_test)) ** 2)
print(‘MSE-LASSO = ‘, mse2)

mpl.rcParams[‘font.sans-serif‘] = [u‘simHei‘]
mpl.rcParams[‘axes.unicode_minus‘] = False
plt.figure(facecolor=‘w‘,figsize=(15, 8))
plt.plot(y_test, ‘r-‘, lw=1, label=u‘真实值‘)
plt.plot(y_hat1, ‘g-‘, lw=1, label=u‘线性回归估计值‘)
plt.plot(y_hat2, ‘b-‘, lw=1, label=u‘Lasso估计值‘)
plt.legend(loc=‘upper left‘)
plt.title(u‘线性回归模型波士顿房价预测‘, fontsize=18)
plt.xlabel(u‘样本编号‘, fontsize=15)
plt.ylabel(u‘房屋价格‘, fontsize=15)
plt.grid()
plt.show()

  

结果如下图:

图1

图中显示,采用普通线性回归的结果和采用Lasso的结果基本一致,甚至在图上难以区分,如采用Ridge方法,结果也基本一致。

用多项式特征来拟合:

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn.linear_model import Lasso, Ridge
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

dataset=datasets.load_boston()

X=dataset.data
Y=dataset.target

x_train, x_test, y_train, y_test = train_test_split(X, Y, train_size=0.7, random_state=0)
order = y_test.argsort(axis=0)  #对测试样本排序,便于显示
y_test = y_test[order]
x_test = x_test[order, :]
for degree in np.arange(1,5):
    model = make_pipeline(PolynomialFeatures(degree),Lasso(alpha=0.1))
    model.fit(x_train,y_train)
    y_hat=model.predict(x_test)
    mse = np.average((y_hat - np.array(y_test)) ** 2)
    print(‘当模型次数为:%d‘%degree)
    print(‘MSE = ‘, mse)
    mpl.rcParams[‘font.sans-serif‘] = [u‘simHei‘]
    mpl.rcParams[‘axes.unicode_minus‘] = False
    plt.figure(facecolor=‘w‘,figsize=(10, 5))
    plt.plot(y_test, ‘r-‘, lw=1, label=u‘真实值‘)
    plt.plot(y_hat, ‘g-‘, lw=1, label=‘degree %d‘ % degree)
    plt.legend(loc=‘upper left‘)
    plt.title(u‘线性回归模型波士顿房价预测‘, fontsize=18)
    plt.xlabel(u‘样本编号‘, fontsize=15)
    plt.ylabel(u‘房屋价格‘, fontsize=15)
    plt.grid()
plt.show()
结果:
当模型次数为:1
MSE =  28.8704970547
当模型次数为:2
MSE =  17.7654067367
当模型次数为:3
MSE =  22.899129217
当模型次数为:4
MSE =  29.5967408848

结果显示当多项式区二次时得到最好的拟合效果

原文地址:https://www.cnblogs.com/jordanxd/p/8545515.html

时间: 2024-10-10 20:47:04

机器学习二(线性回归和Logistic回归)的相关文章

机器学习之线性回归以及Logistic回归

1.线性回归 回归的目的是预测数值型数据的目标值.目标值的计算是通过一个线性方程得到的,这个方程称为回归方程,各未知量(特征)前的系数为回归系数,求这些系数的过程就是回归. 对于普通线性回归使用的损失函数一般为平方误差.把其用最小二乘法进行优化得到的关于系数w求导所得到的矩阵形式的表达式求得的w便为最优解了. 线性回归可以参考:https://www.cnblogs.com/pinard/p/6004041.html 2.Logistic回归 逻辑回归假设数据服从伯努利分布,以最大化条件概率为学

机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)

本文介绍了机器学习中基本的优化算法-梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有样本的特征向量组成的矩阵 x(i) 是第i个样本包含的所有特征组成的向量x(i)=(x(i)1,x(i)2...,x(i)n) y(i) 第i个样本的label,每个样本只有一个label,y(i)是标量(一个数值) hθ(x(i)) :拟合函数,机器学习中可以用多种类型的拟合函数 θ 是函数变量,

【转载】对线性回归,logistic回归和一般回归的认识

对线性回归,logistic回归和一般回归的认识 [转载时请注明来源]:http://www.cnblogs.com/jerrylead JerryLead 2011年2月27日 作为一个机器学习初学者,认识有限,表述也多有错误,望大家多多批评指正. 1 摘要 本报告是在学习斯坦福大学机器学习课程前四节加上配套的讲义后的总结与认识.前四节主要讲述了回归问题,回归属于有监督学习中的一种方法.该方法的核心思想是从连续型统计数据中得到数学模型,然后将该数学模型用于预测或者分类.该方法处理的数据可以是多

对线性回归,logistic回归和一般回归

对线性回归,logistic回归和一般回归 [转自]:http://www.cnblogs.com/jerrylead JerryLead 2011年2月27日 作为一个机器学习初学者,认识有限,表述也多有错误,望大家多多批评指正. 1 摘要 本报告是在学习斯坦福大学机器学习课程前四节加上配套的讲义后的总结与认识.前四节主要讲述了回归问题,回归属于有监督学习中的一种方法.该方法的核心思想是从连续型统计数据中得到数学模型,然后将该数学模型用于预测或者分类.该方法处理的数据可以是多维的. 讲义最初介

机器学习(六)— logistic回归

最近一直在看机器学习相关的算法,今天学习logistic回归,在对算法进行了简单分析编程实现之后,通过实例进行验证. 一 logistic概述 个人理解的回归就是发现变量之间的关系,也就是求回归系数,经常用回归来预测目标值.回归和分类同属于监督学习,所不同的是回归的目标变量必须是连续数值型. 今天要学习的logistic回归的主要思想是根据现有的数据对分类边界线建立回归公式,以此进行分类.主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率等等.log

机器学习实战笔记5(logistic回归)

1:简单概念描述 假设现在有一些数据点,我们用一条直线对这些点进行拟合(改线称为最佳拟合直线),这个拟合过程就称为回归.训练分类器就是为了寻找最佳拟合参数,使用的是最优化算法. 基于sigmoid函数分类:logistic回归想要的函数能够接受所有的输入然后预测出类别.这个函数就是sigmoid函数,它也像一个阶跃函数.其公式如下: 其中: z = w0x0+w1x1+-.+wnxn,w为参数, x为特征 为了实现logistic回归分类器,我们可以在每个特征上乘以一个回归系数,然后把所有的结果

对线性回归,logistic回归和一般回归的认识

假设有一个房屋销售的数据如下:这个表类似于北京5环左右的房屋价钱,我们可以做出一个图,x轴是房屋的面积.y轴是房屋的售价,如下: 如果来了一个新的面积,假设在销售价钱的记录中没有的,我们怎么办呢? 我们可以用一条曲线去尽量准的拟合这些数据,然后如果有新的输入过来,我们可以在将曲线上这个点对应的值返回.如果用一条直线去拟合,可能是下面 的样子:绿色的点就是我们想要预测的点. 首先给出一些概念和常用的符号. 房屋销售记录表:训练集(training set)或者训练数据(training data)

在matlab中实现线性回归和logistic回归

本文主要讲解在matlab中实现Linear Regression和Logistic Regression的代码,并不涉及公式推导.具体的计算公式和推导,相关的机器学习文章和视频一大堆,推荐看Andrew NG的公开课. 一.线性回归(Linear Regression) 方法一.利用公式 : function [ theta ] = linearReg() %线性回归. X=[1 1;1 2;1 3;1 4]; %注意第一列全为1,即x0=1,第二列才为x1 Y=[1.1;2.2;2.7;3.

【机器学习算法实现】logistic回归__基于Python和Numpy函数库

[机器学习算法实现]系列文章将记录个人阅读机器学习论文.书籍过程中所碰到的算法,每篇文章描述一个具体的算法.算法的编程实现.算法的具体应用实例.争取每个算法都用多种语言编程实现.所有代码共享至github:https://github.com/wepe/MachineLearning-Demo     欢迎交流指正! (2)logistic回归__基于Python和Numpy函数库 1.算法简介 本文的重点放在算法的工程实现上,关于算法的原理不具体展开,logistic回归算法很简单,可以看看A