机器学习算法基础-day03-逻辑回归&非监督学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


5. 回归

5.2 分类算法之逻辑回归

逻辑回归(Logistic Regression),简称LR。它的特点是能够使我们的特征输入集合转化为0和1这两类的概率。一般来说,回归不用在分类问题上,因为回归是连续型模型,而且受噪声影响比较大。如果非要应用进入,可以使用逻辑回归。了解过线性回归之后再来看逻辑回归可以更好的理解。

逻辑回归是解决二分类问题的利器

Logistic回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数映射,即先把特征线性求和,然后使用函数g(z)将最为假设函数来预测。g(z)可以将连续值映射到0和1上。Logistic回归用来分类0/1问题,也就是预测结果属于0或者1的二值分类问题

输入
在这里插入图片描述

sigmoid函数
在这里插入图片描述
逻辑回归公式
在这里插入图片描述

5.2.1 逻辑回归的损失函数、优化(了解)

与线性回归原理相同,但由于是分类问题,
损失函数不一样,只能通过梯度下降求解

在这里插入图片描述
当y=1时:

在这里插入图片描述
在这里插入图片描述

5.2.2 sklearn逻辑回归API

sklearn.linear_model.LogisticRegression

sklearn.linear_model.LogisticRegression(penalty=‘l2’, C = 1.0)

Logistic回归分类器
coef_:回归系数

5.2.3 LogisticRegression回归案例

良/恶性乳腺癌肿瘤预测

良/恶性乳腺癌肿数据:

原始数据的下载地址:
https://archive.ics.uci.edu/ml/machine-learning-databases/

数据描述
(1)699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤
相关的医学特征,最后一列表示肿瘤类型的数值。
(2)包含16个缺失值,用”?”标出。

良/恶性乳腺癌肿分类流程
1、网上获取数据(工具pandas)

2、数据缺失值处理、标准化

3、LogisticRegression估计器流程

import pandas as pd
import numpy as np
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge, LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error,classification_report
from sklearn.externals import joblib

def logistic():
    """
    逻辑回归做二分类进行癌症预测(根据细胞的属性特征)
    :return:None
    """
    # 构造列标签名字
    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)
    # print(data)
    #缺失值处理
    data=data.replace(to_replace="?",value=np.nan)
    #进行删除
    data=data.dropna()
    print(data.head(10))
    print(data.info())
    #进行数据的分割
    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(C=1.0)

    lg.fit(x_train,y_train)   #用对数似然损失,不断去求最小值,去优化w值

    print(lg.coef_)

    print("准确率:",lg.score(x_test,y_test))
    y_predict=lg.predict(x_test)
    print("召回率:",classification_report(y_test,y_predict,labels=[2,4],target_names=["良性","恶性"]))
    return None


if __name__=="__main__":
    logistic()

运行结果:

   Sample code number  Clump Thickness  Uniformity of Cell Size  \
0             1000025                5                        1   
1             1002945                5                        4   
2             1015425                3                        1   
3             1016277                6                        8   
4             1017023                4                        1   
5             1017122                8                       10   
6             1018099                1                        1   
7             1018561                2                        1   
8             1033078                2                        1   
9             1033078                4                        2   

   Uniformity of Cell Shape  Marginal Adhesion  Single Epithelial Cell Size  \
0                         1                  1                            2   
1                         4                  5                            7   
2                         1                  1                            2   
3                         8                  1                            3   
4                         1                  3                            2   
5                        10                  8                            7   
6                         1                  1                            2   
7                         2                  1                            2   
8                         1                  1                            2   
9                         1                  1                            2   

  Bare Nuclei  Bland Chromatin  Normal Nucleoli  Mitoses  Class  
0           1                3                1        1      2  
1          10                3                2        1      2  
2           2                3                1        1      2  
3           4                3                7        1      2  
4           1                3                1        1      2  
5          10                9                7        1      4  
6          10                3                1        1      2  
7           1                3                1        1      2  
8           1                1                1        5      2  
9           1                2                1        1      2  
<class 'pandas.core.frame.DataFrame'>
Int64Index: 683 entries, 0 to 698
Data columns (total 11 columns):
 #   Column                       Non-Null Count  Dtype 
---  ------                       --------------  ----- 
 0   Sample code number           683 non-null    int64 
 1   Clump Thickness              683 non-null    int64 
 2   Uniformity of Cell Size      683 non-null    int64 
 3   Uniformity of Cell Shape     683 non-null    int64 
 4   Marginal Adhesion            683 non-null    int64 
 5   Single Epithelial Cell Size  683 non-null    int64 
 6   Bare Nuclei                  683 non-null    object
 7   Bland Chromatin              683 non-null    int64 
 8   Normal Nucleoli              683 non-null    int64 
 9   Mitoses                      683 non-null    int64 
 10  Class                        683 non-null    int64 
dtypes: int64(10), object(1)
memory usage: 64.0+ KB
None
[[1.46233238 0.27145418 0.88323024 0.40627111 0.27986597 1.48136204
  0.80658709 0.66461217 0.54339988]]
准确率: 0.9532163742690059
召回率:               precision    recall  f1-score   support

          良性       0.96      0.97      0.97       118
          恶性       0.94      0.91      0.92        53

    accuracy                           0.95       171
   macro avg       0.95      0.94      0.94       171
weighted avg       0.95      0.95      0.95       171


Process finished with exit code 0

5.2.4 LogisticRegression总结

应用:广告点击率预测、电商购物搭配推荐

优点:适合需要得到一个分类概率的场景

缺点:当特征空间很大时,逻辑回归的性能不是很好
(看硬件能力)

6. 非监督学习

无监督学习,顾名思义,就是不受监督的学习,一种自由的学习方式。该学习方式不需要先验知识进行指导,而是不断地自我认知,自我巩固,最后进行自我归纳,在机器学习中,无监督学习可以被简单理解为不为训练集提供对应的类别标识(label),其与有监督学习的对比如下:

有监督学习(Supervised Learning)下的训练集:

(x(1),y(1)),(x(2),y2)(x(1),y(1)),(x(2),y2)

无监督学习(Unsupervised Learning)下的训练集:

(x(1)),(x(2)),(x(3))(x(1)),(x(2)),(x(3))

在有监督学习中,我们把对样本进行分类的过程称之为分类(Classification),而在无监督学习中,我们将物体被划分到不同集合的过程称之为聚类(Clustering)

6.1 k-means步骤

在这里插入图片描述
1、随机设置K个特征空间内的点作为初始的聚类中心

2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类
中心点作为标记类别

3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平
均值)

4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行
第二步过程

6.1.1 k-means API

sklearn.cluster.KMeans

sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’)
k-means聚类
n_clusters:开始的聚类中心数量
init:初始化方法,默认为’k-means ++’

labels_:默认标记的类型,可以和真实值比较(不是值比较)

6.1.2 案例:k-means对Instacart Market用户聚类

1、降维之后的数据

2、k-means聚类

3、聚类结果显示

#把样本数量减少(降维之后的数据,27列)
x=data[:500]
x.shape
#假设用户一共分为四个类别,
km=KMeans(n_clusters=4)
km.fit(x)
x_predict=km.predict(x)

plt.figure(figsize=(10,10),dpi=80)
#建立四个颜色列表
colored=['orange','green','blue','purple']
color_list=[colored[i] for i in x_predict]
#绘制散点图(取两个特征值)
plt.scatter(x[:,1],x[:,20],color=color_list)

plt.xlabel=("1")
plt.ylabel=("20")
plt.title("sort by four")
#plt.show()

silhouette_score(x,x_predict)

运行结果:
在这里插入图片描述

0.6015157315402805

6.1.3 Kmeans性能评估指标

在这里插入图片描述
如果〖𝑠𝑐〗_𝑖 小于0,说明𝑎_𝑖 的平均距离大于最近的其他簇。
聚类效果不好

如果〖𝑠𝑐〗_𝑖 越大,说明𝑎_𝑖 的平均距离小于最近的其他簇。
聚类效果好

轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优

6.1.4 Kmeans性能评估指标API

sklearn.metrics.silhouette_score

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

6.1.5 Kmeans总结

特点分析:
采用迭代式算法,直观易懂并且非常实用

缺点:容易收敛到局部最优解(多次聚类)
需要预先设定簇的数量(k-means++解决)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_47049321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值