机器学习——逻辑回归与K-means聚类

机器学习——逻辑回归与K-means聚类

  • 逻辑回归
  • Softmax回归
  • K-means聚类

逻辑回归

线性回归的式子作为输入,利用sigmoid函数,得到概率值,解决二分类问题,概率大于0.5的归为第一类,否则归为另一类。
sigmoid函数: g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+ez1,将输入映射到[0,1]上。

逻辑回归的损失函数
对数似然损失函数:
c o s t ( h θ ( x ) , y ) = ∑ i = 1 m − y i l o g ( h θ ( x ) ) − ( 1 − y i ) ( 1 − h θ ( x ) ) cost(h_{\theta}(x),y)=\sum_{i=1}^{m}-y_ilog(h_{\theta}(x))-(1-y_i)(1-h_{\theta}(x)) cost(hθ(x),y)=i=1myilog(hθ(x))(1yi)(1hθ(x))
cost损失的值越小,那么预测的类别准确率更高。逻辑回归同样会出现过拟合的情况,在API中有正则化的选项来解决这一问题。

sklearn逻辑回归API:sklearn.linear_model.LogisticRegression

  • sklearn.linear_model.LogisticRegression(penalty=‘l2’, C=1.0)
    • Logistic回归器分类器
    • coef_:回归系数

其中penalty代表L2正则化,C=1.0代表正则系数。

注:逻辑回归需要对特征值进行标准化,目标值不需要

对于逻辑回归的损失函数,可能存在多个局部最小值,梯度下降法可能求不出全局最小值,解决方法有:
1、多次随机初始化,多次比较最小值结果;
2、求解过程当中,尽量调节学习率。

判别模型和生成模型的区别在于有无先验概率,判别模型包括:K-近邻,决策树,随机森林,神经网络,生成模型包括:朴素贝叶斯,隐马尔可夫模型

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import pandas as pd
import numpy as np

# 读取数据
column = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
          'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli',
          'Mitoses', 'Class']
data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names = column)
# 处理缺失值
data = data.replace(to_replace = '?',value = np.nan)
data = data.dropna()

# 数据分割
x_train, x_test, y_train, y_test = train_test_split(data[column[1:10]], data[column[10]],test_size=0.25)

# 数据标准化处理
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)

# 逻辑回归
lg = LogisticRegression(penalty='l2', C=1.0)
lg.fit(x_train, y_train)
predict = lg.predict(x_test)
print(lg.coef_)
print(lg.score(x_test, y_test))

Softmax回归

解决K分类问题,第k类的参数为向量 θ k \theta_k θk,组成二维矩阵 θ k × n \theta_{k\times n} θk×n.
概率 P ( c = k ∣ x ; θ ) = exp ⁡ ( θ k T x ) / ∑ l = 1 k exp ⁡ ( θ l T x ) P(c=k|x;\theta)=\exp(\theta_k^Tx)/\sum_{l=1}^{k}\exp(\theta_l^Tx) P(c=kx;θ)=exp(θkTx)/l=1kexp(θlTx), k = 1,2,…,K
似然函数 L ( θ ) = ∏ i = 1 m ∏ k = 1 K P ( c = k ∣ x ( i ) ; θ ) y k ( i ) = ∏ i = 1 m ∏ k = 1 K ( exp ⁡ ( θ k T x ( i ) ) ∑ l = 1 K exp ⁡ ( θ l T x ( i ) ) ) y k ( i ) L(\theta)=\prod_{i=1}^{m}\prod_{k=1}^{K}P(c=k|x^{(i)};\theta)^{y_k^{(i)}}=\prod_{i=1}^m\prod_{k=1}^K(\frac{\exp(\theta_k^Tx^{(i)})}{\sum_{l=1}^K\exp(\theta_l^Tx^{(i)})})^{y_k^{(i)}} L(θ)=i=1mk=1KP(c=kx(i);θ)yk(i)=i=1mk=1K(l=1Kexp(θlTx(i))exp(θkTx(i)))yk(i)
随机梯度
∂ log ⁡ L ( θ ) ∂ θ k = ( y k − P ( y k ∣ x ; θ ) ) ⋅ x \frac{\partial\log L(\theta)}{\partial\theta_k}=(y_k-P(y_k|x;\theta))\cdot x θklogL(θ)=(ykP(ykx;θ))x

K-means聚类

  • k-means步骤
    • 随机设置K个特征空间内的点作为初始的聚类中心
    • 对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类
      中心点作为标记类别
    • 接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平
      均值)
    • 如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行
      第二步过程

k-means API:sklearn.cluster.KMeans

  • sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’)
    • k-means聚类
    • n_clusters: 开始的聚类中心数量
    • init: 初始化方法,默认为’k-means ++’
    • labels_: 默认标记的类型,可以和真实值比较(不是值比较)

Kmeans性能评估指标

轮廓系数:
S C i = b i − a i m a x { a i , b i } SC_i=\frac{b_i-a_i}{max\{a_i,b_i\}} SCi=max{ai,bi}biai
其中:对于每个点 为已聚类数据中的样本 , b i b_i bi i i i 到其它族群的所有样本的平均
距离, a i a_i ai i i i 到本身簇的距离平均值,最终计算出所有的样本点的轮廓系数平均值。

  • 如果 S C i SC_i SCi小于0,说明 a i a_i ai 的平均距离大于最近的其他簇。
    聚类效果不好
  • 如果 S C i SC_i SCi 越大,说明 a i a_i ai 的平均距离小于最近的其他簇。
    聚类效果好
  • 轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优

Kmeans性能评估指标API:sklearn.metrics.silhouette_score

  • sklearn.metrics.silhouette_score(X, labels)
    • 计算所有样本的平均轮廓系数
    • X:特征值
    • labels:被聚类标记的目标值

Kmeans总结

  • 特点分析:采用迭代式算法,直观易懂并且非常实用
  • 缺点:容易收敛到局部最优解(多次聚类),需要预先设定簇的数量(k-means++解决)

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