梯度下降和逻辑回归

梯度下降法

梯度下降法是求解无约束最优化问题的一种最常用的方法,它是一种迭代算法,每一步需要求解目标函数的梯度向量。
梯度下降法算法:
输入:目标函数f(x),梯度函数g(x)=∇f(x),计算精度ε:f(x)的极小点x0f(x),梯度函数g(x) = \nabla f(x),计算精度\varepsilon :f(x)的极小点{x_0}f(x)g(x)=f(x)εf(x)x0
(1)取初始值x0∈Rn,置k=0{x_0} \in {R^n},置k=0x0Rnk=0
(2)计算f(x(k))f({x^{(k)}})f(x(k))
(3)计算梯度g(k)=g(x(k))g(k) = g({x^{(k)}})g(k)=g(x(k)),当∥gk&lt;ε∥\left\| {{g_k} &lt; \varepsilon } \right\|gk<ε时,停止迭代,令x0=xk{x_0} = {x_k}x0=xk;否则,令pk=−g(x(k)){p_k} = - g({x^{(k)}})pk=g(x(k)),求λk{\lambda _k}λk,使$ f({x^{(k)}} + {\lambda k}{p_k}) = \mathop {\min }\limits{\lambda \ge 0} f({x^{(k)}} + \lambda {p_k})$
(4)置x(k+1)=x(k)+λkpk{x^{(k + 1)}} = {x^{(k)}} + {\lambda _k}{p_k}x(k+1)=x(k)+λkpk,计算f(x(k+1))f({x^{(k + 1)}})f(x(k+1))
∥f(x(k+1))−f(x(k))∥&lt;ε或∥x(k+1)−x(k)∥&lt;ε时,停止迭代,令x0=x(k+1)\left\| {f({x^{(k + 1)}}) - f({x^{(k)}})} \right\| &lt; \varepsilon 或\left\| {{x^{(k + 1)}} - {x^{(k)}}} \right\| &lt; \varepsilon 时,停止迭代,令{x_0} = {x^{(k + 1)}}f(x(k+1))f(x(k))<εx(k+1)x(k)<εx0=x(k+1)
(5)否则,置k=k+1k = k + 1k=k+1,转(3)
但要注意,梯度下降法得到的解有时候未必是全局最优解。

逻辑回归

逻辑回归有二分类的,也有多分类的,但由于二分类比较常用,也容易理解,所以实际上应用的大多是二分类的逻辑回归。
在一个线性模型中,我们可以得到一系列连续的值,然而在一个二分类问题中,我们希望它输出0或者1,对此,引入一个新的模型,即逻辑模型来解决这个问题
hθ(x)=g(θTx)其中x代表特征向量,g是一个逻辑函数S形,公式为g(z)=11+e−z{h_\theta }(x) = g({\theta ^T}x) 其中x代表特征向量,g是一个逻辑函数S形,公式为g(z) = \frac{1}{{1 + {e^{ - z}}}}hθ(x)=g(θTx)xgSg(z)=1+ez1
该函数图像为
S函数
hθ(x)的作用,对于给定,根据选择的参数计算输出变量为1的可能性,即hθ(x)=P(y=1∣x;θ){h_\theta }(x)的作用,对于给定,根据选择的参数计算输出变量为1的可能性,即{h_\theta }(x) = P(y = 1|x;\theta )hθ(x)1hθ(x)=P(y=1x;θ)
接下来,调用python中sklearn的库来完成逻辑回归的分类

# -*- coding: utf-8 -*-
"""
Created on Thu Apr 20 16:00:35 2017

@author: Mosang
"""

import matplotlib.pyplot as plt
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model.logistic import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix

df = pd.read_csv('D:/spam.csv', encoding='latin-1')
#print(df.head())
df = df.drop(['Unnamed: 2','Unnamed: 3','Unnamed: 4'],axis=1)
df = df.rename(columns = {'v1':'label','v2':'message'})
df.groupby('label').describe()
df['length'] = df['message'].apply(len)
#print(df.head())

features_train_raw, features_test_raw, labels_train, labels_test = train_test_split(
        df.iloc[:,1], df.iloc[:,0], test_size=0.3, random_state=0)
vectorizer = TfidfVectorizer()
features_train = vectorizer.fit_transform(features_train_raw)
features_test = vectorizer.transform(features_test_raw)

classifier = LogisticRegression()
classifier.fit(features_train, labels_train)
predictions = classifier.predict(features_test)

print (accuracy_score(labels_test, predictions))

confusion_matrix = confusion_matrix(labels_test, predictions)
print(confusion_matrix)
plt.matshow(confusion_matrix)
plt.title('混淆矩阵', fontproperties = 'SimHei')
plt.colorbar()
plt.ylabel('实际类型', fontproperties = 'SimHei')
plt.xlabel('预测类型', fontproperties = 'SimHei')
plt.show()

预测之后的精度约等于0.965,而画出来的混淆矩阵为

参考:
1.Mastering Machine Learning With scikit-learn
2.统计学习方法
3.机器学习个人笔记
4.数据集来自kaggle上的短信垃圾邮件收集数据集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值