分类算法-逻辑回归
逻辑回归是解决二分类问题的利器
输入:
sigmoid函数
公式:
输出:[0,1]区间的概率值,默认0.5作为阀值
注:g(z)为sigmoid函数,z为回归的值
逻辑回归的损失函数、优化
与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解
sklearn逻辑回归API:sklearn.linear_model.LogisticRegression
语法:
sklearn.linear_model.LogisticRegression(penalty=‘l2’, C = 1.0)
Logistic:回归分类器
coef_:回归系数
LogisticRegression总结
应用:广告点击率预测、电商购物搭配推荐
优点:适合需要得到一个分类概率的场景
缺点:当特征空间很大时,逻辑回归的性能不是很好(看硬件能力)
逻辑回归与朴素贝叶斯的区别:
案例----良/恶性乳腺癌肿瘤预测
数据来源:https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/
数据描述:
(1)699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤相关的医学特征,最后一列表示肿瘤类
型的数值。
(2)包含16个缺失值,用”?”标出。
正例:哪一个类别少,判定概率值就是这个类别。如:在此案例中,恶性的概率值小,则恶性为正例
分析流程:
1.网上获取数据(工具pandas)
pd.read_csv("",names=column_names)
column_names:指定类别名字—[‘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’]
return:数据
2.数据缺失值处理、标准化
replace(to_replace="",value="")----替换
to_replace:待替换的值
value:替换后的值
dropna()----删除
3.LogisticRegression估计器流程
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():
"""逻辑回归二分类进行癌症预测(根据细胞的属性特征)"""
# 构造列标签
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:特征值 y:目标值
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.fit_transform(x_test)
# 逻辑回归预测
lg = LogisticRegression(C = 1.0)
lg.fit(x_train,y_train)
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=["良性","恶性"]))
if __name__ == '__main__':
logistic()
结果为: