scikit-learn LogisticRegression原理及实例

逻辑斯蒂回归
原理:Sigmoid函数,最大似然估计,梯度下降法
根据现有数据对分类边界线建立回归公式,以此进行分类。这里的“回归” 一词源于最佳拟合,表示要找到最佳拟合参数集。

实现:
1 找一个合适的预测函数,一般表示为h函数(该函数的输出必须是两类值),该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程是非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数。
2 构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他的形式。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。
3 显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有梯度下降法(Gradient Descent)。

Attibutes

  • coef_ : 变量中的系数。shape (1, n_features) or (n_classes, n_features)
  • intercept_ :截距。shape (1,) or (n_classes,)
  • n_iter_ :所有类的实际迭代次数。shape (n_classes,) or (1, )

Methods

  • decision_function(X):预测样本的 confidence scores
  • densify():将系数矩阵转化成密集矩阵的格式
  • fit(X, y[,sample_weight]):根据给出的训练数据来训练模型。用来训练LR分类器,其中X是训练样本,y是对应的标记样本。
  • get_params([deep]):Get parameters for this estimator.
  • predict(X):用来预测测试样本的标记,也就是分类。预测x的标签
  • predict_log_proba(X):对数概率估计
  • predict_proba(X):概率估计
  • score(X, y[,sample_weight]):返回给定的测试数据和标签的平均精度
  • set_params(**params):设置estimate的参数
  • sparsify():将系数矩阵转换成稀疏矩阵格式。

数据集分类实例:

from sklearn.neighbors import KNeighborsClassifier    
from sklearn.linear_model import LogisticRegression
import sklearn.datasets as datasets
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt

1 手动分类

digits = datasets.load_digits()
data  =digits.data            # (1797, 64)
target = digits.target        # (1797,)
X_train,X_test,y_train,y_test = train_test_split(data, target,test_size = 0.02)                    # 拆分数据
knn = KNeighborsClassifier()             # 创建模型
knn.fit(X_train,y_train).score(X_test,y_test)               # 训练模型 查看得分
LogisticRegression().fit(X_train,y_train).score(X_test,y_test)

2 使用make_blobs产生数据集进行分类

  • sklearn.datasets.make_blobs(n_samples=100, n_features=2, centers=3, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None) 生成簇点
data, target = datasets.make_blobs(n_samples=150)         # 默认三个簇点两个特征  (150, 2) (150,)
logic = LogisticRegression()
logic.fit(data, target)

#创建预测数据 在画布上取10000个点
#取预测数据时,必须在画布范围内取
xmin,xmax = data[:,0].min(), data[:,0].max()
ymin, ymax = data[:,1].min(), data[:,1].max()
x = np.linspace(xmin, xmax, 100)
y = np.linspace(ymin, ymax, 100)
xx,yy = np.meshgrid(x,y)                      # 两个(100, 100)的网格矩阵 
x_test = np.c_[xx.ravel(), yy.ravel()]        # (10000, 2)
y_ = logic.predict(x_test)                    # (10000,)

%matplotlib inline
plt.figure(figsize=(12,9))
plt.pcolormesh(xx, yy, y_.reshape(xx.shape))           # 对坐标点进行着色
plt.scatter(data[:,0],data[:,1], c = target, cmap = "rainbow")

你可能感兴趣的:(python,机器学习,算法)