逻辑斯蒂回归
原理:Sigmoid函数,最大似然估计,梯度下降法
根据现有数据对分类边界线建立回归公式,以此进行分类。这里的“回归” 一词源于最佳拟合,表示要找到最佳拟合参数集。
实现:
1 找一个合适的预测函数,一般表示为h函数(该函数的输出必须是两类值),该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程是非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数。
2 构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他的形式。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。
3 显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有梯度下降法(Gradient Descent)。
Attibutes
Methods
数据集分类实例:
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产生数据集进行分类
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")