赞
踩
是一个对数几率模型(又译作逻辑模型,评估模型,分类评估模型)是离散选择法模型之一,属于多重变量分析类别,是 一种广义的线性回归分析模型。
是社会学,生物统计学,临床,数量心理学,计量经济学,市场营销等统计实证分析的常用方法。
尽管叫逻辑回归,但是其实并不用于回归分析,而是用于分类,也称为对数回归,最大熵分类,或者对数线性分类器。
举例子:胃癌病情分析,一组是胃癌,一组是非胃癌,因变量为是否胃癌;自变量可以又很多维度,比如:年龄,性别,饮食习惯等等。通过逻辑回归分析,可以得到自变量的权重,从而可以大致了解到底哪些因素是导致胃癌的危险因素,以及根据危险因素预测一个人患胃癌的可能性。
自变量:主动操作的变量,可以看做「因变量」的原因
因变量:因为「自变量」的变化而变化,可以看做「自变量」的结果。也是我们想要预测的结果。
该模型的适用条件:
主要用途:
为什么出现(为什么需要这个技术)
解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性,比如某用户购买某种商品的可能性;某人患病的可能性,某广告被点击的可能性。
同类技术有哪些
优点:
缺点:
sklearn.linear_model.LogisticRegression
简要步骤:
- from sklearn.model_selection import train_test_split
- from sklearn.datasets import load_digits
- from sklearn.linear_model import LogisticRegression
- LR = LogisticRegression(C=1.0, penalty='l1', tol=0.01)
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
- LR.fit(X_train,y_train)
- LR.predict(X_test)
- LR.score(X_test,y_test)
sklearn 已经对机器学习算法进行了封装,在实际应用中,主要的工作就是对数据的预处理,挑选出好的特征,调式算法,多试一些算法,比较它们之间的性能,选择出好 模型。
import
sklearn中的LR算法
- # 导入相关包
- from sklearn import datasets # sklearn自带数据集
- import numpy as np
- from sklearn.cross_validation import train_test_split
-
- iris = datasets.load_iris() # 由于Iris是很有名的数据集,scikit-learn已经原生自带了。
- X = iris.data[:, [2, 3]]
- y = iris.target # 标签已经转换成0,1,2了
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # 为了看模型在没有见过数据集上的表现,随机拿出数据集中30%的部分做测试
-
- # 分开训练集、测试集
- # train= loan_data.iloc[0: 55596, :]
- # test= loan_data.iloc[55596:, :]
-
- # 为了追求机器学习和最优化算法的最佳性能,我们将特征缩放
- from sklearn.preprocessing import StandardScaler
- sc = StandardScaler()
- sc.fit(X_train) # 估算每个特征的平均值和标准差
- sc.mean_ # 查看特征的平均值,由于Iris我们只用了两个特征,所以结果是array([ 3.82857143, 1.22666667])
- sc.scale_ # 查看特征的标准差,这个结果是array([ 1.79595918, 0.77769705])
- X_train_std = sc.transform(X_train)
- # 注意:这里我们要用同样的参数来标准化测试集,使得测试集和训练集之间有可比性
- X_test_std = sc.transform(X_test)
-
- # 训练感知模型
- from sklearn.linear_model import Perceptron
- # n_iter:可以理解成梯度下降中迭代的次数
- # eta0:可以理解成梯度下降中的学习率
- # random_state:设置随机种子的,为了每次迭代都有相同的训练集顺序
- ppn = Perceptron(n_iter=40, eta0=0.1, random_state=0)
- ppn.fit(X_train_std, y_train)
-
- # 分类测试集,这将返回一个测试结果的数组
- y_pred = ppn.predict(X_test_std)
- # 计算模型在测试集上的准确性,我的结果为0.9,还不错
- accuracy_score(y_test, y_pred)
-
- import matplotlib.pyplot as plt
- import numpy as np
- from matplotlib.colors import ListedColormap
-
-
- def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):
- # setup marker generator and color map
- markers = ('s', 'x', 'o', '^', 'v')
- colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
- cmap = ListedColormap(colors[:len(np.unique(y))])
- # plot the decision surface
- x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
- x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
- xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))
- Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
- Z = Z.reshape(xx1.shape)
- plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)
- plt.xlim(xx1.min(), xx1.max())
- plt.ylim(xx2.min(), xx2.max())
- # plot class samples
- for idx, cl in enumerate(np.unique(y)):
- plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],alpha=0.8, c=cmap(idx),marker=markers[idx], label=cl)
- # highlight test samples
- if test_idx:
- X_test, y_test = X[test_idx, :], y[test_idx]
- plt.scatter(X_test[:, 0], X_test[:, 1], c='', alpha=1.0, linewidth=1, marker='o', s=55, label='test set')
-
- from sklearn import datasets
- import numpy as np
- from sklearn.cross_validation import train_test_split
-
- iris = datasets.load_iris()
- X = iris.data[:, [2, 3]]
- y = iris.target
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
-
- from sklearn.preprocessing import StandardScaler
- sc = StandardScaler()
- sc.fit(X_train)
- X_train_std = sc.transform(X_train)
- X_test_std = sc.transform(X_test)
-
- X_combined_std = np.vstack((X_train_std, X_test_std))
- y_combined = np.hstack((y_train, y_test))
-
- from sklearn.linear_model import LogisticRegression
- lr = LogisticRegression(C=1000.0, random_state=0)
- lr.fit(X_train_std, y_train)
- lr.predict_proba(X_test_std[0,:]) # 查看第一个测试样本属于各个类别的概率
- plot_decision_regions(X_combined_std, y_combined, classifier=lr, test_idx=range(105,150))
- plt.xlabel('petal length [standardized]')
- plt.ylabel('petal width [standardized]')
- plt.legend(loc='upper left')
- plt.show()
参考:
李亚鑫:逻辑回归(Logistic Regression)(一)zhuanlan.zhihu.comCopyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。