Bermu

100-day-of-4 ML 🐅

2018-09-18

逻辑回归

什么是逻辑回归?

用来处理不同的分类问题,目的是区分被观察的对象属于哪个分组,提供一个离散的二进制输出结果。例子:[选举问题]


sigmoid 函数

sigmoid函数的曲线类似一个导致的S
将真实值反映在0-1区间内

逻辑回归 vs 线性回归

逻辑回归给出的是离散的结果,而线性回归给出的是连续的输出结果


实现

数据集选用 [社交网络]

预测一堆用户中是否买车的概率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# -*- coding: utf-8 -*-  
# 导入库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 导入数据集
dataset = pd.read_csv('dataset/Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
Y = dataset.iloc[:, 4].values

# print(X, Y)

# 分割训练集与测试集
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.25 ,random_state = 0)

# 特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# =====
# 插播
# transform和fit_transform的区别
# transform之前加fit是为了让数据转为(0,1)分布,后者是让数据先进行标准差和均值化之后再进行转换,前者是对之前数据计算的参数转换
# =====


# 逻辑回归模型

# 应用训练集
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, Y_train)

y_pred = classifier.predict(X_test)

# 生成混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(Y_test, y_pred)

# 可视化
from matplotlib.colors import ListedColormap
X_set, Y_set = X_train, Y_train
X1,X2=np. meshgrid(np. arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01),
np. arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=0.01))

# contourf 是轮廓,ravel是降维打击
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha = 0.75, cmap = ListedColormap(('red', 'green')))

# xlim是x轴限定
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())

for i,j in enumerate(np.unique(Y_set)):
plt.scatter(X_set[Y_set==j,0],X_set[Y_set==j,1],
c = ListedColormap(('red', 'green'))(i), label=j)


plt.title('LOGISTIC(Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()


X_set, Y_set = X_test, Y_test
X1,X2=np.meshgrid(np. arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01),
np. arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=0.01))

plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha = 0.75, cmap = ListedColormap(('red', 'green')))

plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())
for i,j in enumerate(np. unique(Y_set)):
plt.scatter(X_set[Y_set==j,0],X_set[Y_set==j,1],
c = ListedColormap(('red', 'green'))(i), label=j)


plt. title(' LOGISTIC(Test set)')
plt. xlabel(' Age')
plt. ylabel(' Estimated Salary')
plt. legend()
plt. show()

结果

Traing set

Testing set

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章