以上例子特点:属于两个类别之间的判断,逻辑回归就是解决二分类的利器。
逻辑回归的损失,称之为对数似然损失,公式如下
优化:同样使用梯度下降优化算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率
sklearn.linear_model.LogisticRefression(solver=‘liblinear’, penalty='l2, C=1.0)
LogisticRegression方法相当于SGDCIassifier(loss=“log”, penalty=" "), SGDClassifier实现了一个普通的随机梯度下降学习也支持平均随机梯度下降法(ASGD),可以通过设置average=True。而使用LogisticRegression(实现了SAG)
1)获取数据:读取的时候加上names
2)数据处理:处理缺失值
3)数据集划分
4)特征工程:无量纲化处理—标准化
5)逻辑回归预估器
6)模型评估
import pandas as pd
import numpy as np
# 1、读取数据
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data"
column_name = ['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(path, names=column_name)
# 2、缺失值处理
# 1)缺失值替换成np.nan
data = data.replace(to_replace="?", value=np.nan)
# 2)删除缺失样本
data.dropna(inplace=True)
# 3)检查是否还存在缺失值(可省略)
# data.dropna(inplace=True)
# 3、划分数据集
from sklearn.model_selection import train_test_split
# 筛选特征值和目标值
x = data.iloc[:, 1:-1]
y = data["Class"]
x_train, x_test, y_train, y_test = train_test_split(x, y)
# 4、标准化
from sklearn.preprocessing import StandardScaler
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
from sklearn.linear_model import LogisticRegression
# 5、预估器流程
estimator = LogisticRegression()
estimator.fit(x_train, y_train)
# 逻辑回归的模型参数:回归系数和偏置
estimator.coef_ # 权重
estimator.intercept_ # 偏置
# 6、模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
运行结果
y_predict:
[2 2 4 4 2 2 2 4 2 4 2 4 2 4 4 4 2 4 2 2 4 2 2 2 4 2 2 2 2 2 2 2 4 2 2 2 4
2 4 4 4 2 4 2 2 2 2 2 2 4 2 4 4 2 2 2 2 2 4 2 2 4 2 4 2 4 2 2 2 2 2 4 2 4
2 4 4 2 2 4 4 2 2 2 2 2 2 2 2 2 2 4 2 2 4 2 4 2 2 4 4 2 2 2 2 2 2 2 2 2 2
4 4 2 2 2 2 2 2 4 2 2 2 2 2 2 2 4 4 2 2 2 2 4 4 2 2 2 2 4 4 2 4 2 2 2 2 2
2 4 2 4 2 2 2 2 2 2 4 4 2 4 2 4 4 2 4 2 4 4 2]
直接比对真实值和预测值:
195 True
384 True
658 True
251 True
471 True
...
85 True
660 True
53 True
126 True
192 True
Name: Class, Length: 171, dtype: bool
准确率为:
0.9590643274853801
# 查看精确率、召回率、F1-score
from sklearn.metrics import classification_report
report = classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"])
衡量样本不均衡下的评估
# y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
# 将y_test 转换成 0 1
y_true = np.where(y_test > 3, 1, 0)
from sklearn.metrics import roc_auc_score
roc_auc_score(y_true, y_predict)`在这里插入代码片`
import joblid
1)随机设置K个特征空间内的点作为初始的聚类中心
2)对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点
作为标记类别
3)接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
4)如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程
sklearn.cluster.KMeans(n_cluster=8, init=‘k-means++’)
之前学的主成分分析中的instacart 降维案例
from sklearn.cluster import KMeans
estimator = KMeans(n_clusters=3)
estimator.fit(data_new)
y_predict = estimator.predict(data_new)
注意:聚类一般做在分类之前