梯度下降和逻辑回归
2017-04-20 18:22
197 查看
梯度下降法
梯度下降法是求解无约束最优化问题的一种最常用的方法,它是一种迭代算法,每一步需要求解目标函数的梯度向量。梯度下降法算法:
输入:目标函数f(x),梯度函数g(x)=∇f(x),计算精度ε:f(x)的极小点x0
(1)取初始值x0∈Rn,置k=0
(2)计算f(x(k))
(3)计算梯度g(k)=g(x(k)),当∥gk<ε∥时,停止迭代,令x0=xk;否则,令pk=−g(x(k)),求λk,使f(x(k)+λkpk)=minλ≥0f(x(k)+λpk)
(4)置x(k+1)=x(k)+λkpk,计算f(x(k+1))
当∥∥f(x(k+1))−f(x(k))∥∥<ε或∥∥x(k+1)−x(k)∥∥<ε时,停止迭代,令x0=x(k+1)
(5)否则,置k=k+1,转(3)
但要注意,梯度下降法得到的解有时候未必是全局最优解。
逻辑回归
逻辑回归有二分类的,也有多分类的,但由于二分类比较常用,也容易理解,所以实际上应用的大多是二分类的逻辑回归。在一个线性模型中,我们可以得到一系列连续的值,然而在一个二分类问题中,我们希望它输出0或者1,对此,引入一个新的模型,即逻辑模型来解决这个问题
hθ(x)=g(θTx)其中x代表特征向量,g是一个逻辑函数S形,公式为g(z)=11+e−z
该函数图像为
hθ(x)的作用,对于给定,根据选择的参数计算输出变量为1的可能性,即hθ(x)=P(y=1|x;θ)
接下来,调用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上的短信垃圾邮件收集数据集
相关文章推荐
- xbgoost svm 逻辑回归 梯度下降等推导过程
- Andrew机器学习课程笔记(1)——梯度下降、逻辑回归
- 逻辑回归:损失函数与梯度下降
- 梯度下降求解逻辑回归(Python)
- 梯度下降法解逻辑斯蒂回归
- 梯度下降求解逻辑回归(代码)
- 逻辑回归梯度下降法详解
- 斯坦福大学机器学习课程笔记: 逻辑回归以及梯度下降
- Machine Learning - WEEK 1 2 3- 线性回归 、逻辑回归、梯度下降法及其优化算法、传统方法、 Octave 入门
- 逻辑回归-梯度下降训练
- 梯度下降求解逻辑回归2(代码编写以及三种梯度下降对比)
- 梯度下降求解逻辑回归
- 机器学习07-逻辑回归-代价函数与梯度下降的优化
- 机器学习实战——梯度下降求解逻辑回归(1理论基础)
- 逻辑回归和梯度下降简单应用案例
- 逻辑回归代价函数及其梯度下降公式
- 线性回归、梯度下降、逻辑回归(Linear Regression、Gradient Descent、Logistic Regression)
- 逻辑回归与梯度下降
- 梯度下降法解逻辑斯蒂回归
- 信用评分之六--逻辑回归模型梯度下降法跟牛顿法比较