目录
1.逻辑回归
逻辑回归:线性回归式子作为输入 针对二分类问题 也能得出概率值
哪一个类别少 将这个类别作为 判定概率值
1.1 sigmoid函数
将输入转化成概率值
1.2 逻辑回归的损失函数
均方误差 不存在多个局部点
对数似然损失 存在局部最小值 (至今未完全解决)
解决方式:1.多次随机初始化比较最小值 2.调整学习率
1.3 逻辑回归 API
sklearn.linear_model.LogisticRegression
逻辑回归 自带正则化过程 解决过拟合问题
1.4 逻辑回归案例 肿瘤检测
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
def logistic():
'''
逻辑回归二分类预测肿瘤
:return:
'''
# 构造列标签名字
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() # 删除nan
# 进行数据分割
x_train, x_test, y_train, y_test = train_test_split(data[column[1:10]], data[column[10]], test_size=0.25) # 特征值是1-9列
# 进行标准化处理 这里测试集不需要标准化
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)
y_predict = lg.predict(x_test) # 获得预测值
print(lg.coef_)
print("准确率:", lg.score(x_test, y_test))
# 这种问题更关心召回率
print("召回率:", classification_report(y_test, y_predict, labels=[2, 4], target_names=['良性', '恶性']))
if __name__ == '__main__':
logistic()
2.k-means
2.1 原理、步骤
非监督学习没有目标值
聚类一般在分类之前
K:把数据划分成多少个类别
1、随机设置K个特征空间内的点作为初始的聚类中心
2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程
2.2 k-means API
sklearn.cluster.
KMeans
2.3 性能评估指标
如果𝑠𝑐𝑖 小于0,说明a_i 的平均距离大于最近的其他簇。聚类效果不好
如果𝑠𝑐𝑖 越大,说明a_i 的平均距离小于最近的其他簇。聚类效果好
轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优
2.4 API
sklearn.metrics.
silhouette_score