(5)从Intuition的角度透彻理解Logistic Regression

本节讲解逻辑回归案例实战。

 
 

(1)      Numpy是操作矩阵的库。matplotlib.pyplot是帮助绘图的库。Pandas加载数据,进行数据的预处理。

1.  # Importing the libraries	
2.  import numpy as np	
3.  import matplotlib.pyplot as plt	
4.  import pandas as pd 	


 
 

(2)      pd.read_csv方法加载Social_Network_Ads.csv数据文件。训练集数据只需要年龄和大致薪水两列,从索引的角度,就是索引为2、3的列。注意,要读取这两列的数据,这里的写法有点特别,采用的是一个数组的方式[2, 3],而不是2后面有一个冒号,如果采用冒号的方式,要写成2:4,因为写成冒号时不读取最后1列。使用数组的方式想读取2、3列,就写第2列、第3列的索引[2, 3]。实际的值是y,y就是第4列。

1.  # Importing the dataset	
2.  dataset = pd.read_csv('Social_Network_Ads.csv')	
3.  X = dataset.iloc[:, [2, 3]].values	
4.  y = dataset.iloc[:, 4].values 	


 
 

(3)      test_size = 0.25,按照25%的比例拆成测试集。案例文件有400条数据,其中100条数据专门用来测试,300条数据用来训练。设置参数random_state = 0,使每次的运行结果都一样,方便我们观察。在生产环境里面,一般要采用随机数。

1.  # Splitting the dataset into the Training set and Test set	
2.  #from sklearn.cross_validation import train_test_split	
3.  from sklearn.model_selection import train_test_split 	
4.  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0) 	


 
 

(4)进行特征缩放。

1.  # Feature Scaling	
2.  from sklearn.preprocessing import StandardScaler	
3.  sc = StandardScaler()	
4.  X_train = sc.fit_transform(X_train)	
5.  X_test = sc.transform(X_test) 	

为什么要进行特征缩放?年龄是两位数字,薪水是五位、六位数字,机器学习从输入特征中找出某种规律和关系,然后预测未来。薪水这么大,占据很大的比重,那年龄就无关紧要了。但年龄不是无关紧要,年龄很重要,所以这里必须进行特征缩放。

 
 

(5)sklearn中导入LogisticRegression,实例化LogisticRegression及训练模型。LogisticRegression(random_state = 0)设置random_state = 0,也是方便我们观察。x_train是年龄、薪水两个特征,y_train是最后1列的值,通过classifier.fit(x_train, y_train)进行模型训练。

1.  # Fitting Logistic Regression to the Training set	
2.  from sklearn.linear_model import LogisticRegression	
3.  classifier = LogisticRegression(random_state = 0)	
4.  classifier.fit(X_train, y_train)	


 
 

sklearn已经帮我们实现了逻辑回归算法,注意,LogisticRegression是在sklearn的linear_model包下,这个分类还是有道理的。逻辑回归在线性回归的基础上加上了一个概率的概念,如果你不了解它们内部之间的关联,会感到有点困惑。

(6)模型预测。x_test有100条数据。

1.   # Predicting the Test set results	
2.  y_pred = classifier.predict(X_test)	


 这些基本的步骤和以前的案例代码没任何区别。很多人学习机器学习总是不得要领和不入法门,这里面最重要的原因之一就是机器学习算法本身,从数学的角度,机器学习很复杂,这个看你的数学功底,如果读大学本科时,每次数学考试你都得A、或A+,每次数学考试都在95分以上,那你会感觉人工智能的算法不是太难;如果你对数学公式推导过程不太擅长,学习数学公式本身就很困难。但转过来一想,你的大部分场景就是运用这些数学公式,所有的机器学习库、人工智能框架使用起来都是惊人的简单,实例化一个类,训练模型,预测模型,好像学习了半年、一年、两年,感觉你的水平没什么进步,这可能是机器学习、人工智能领域也不能说是矛盾的地方,背后的数学步骤很多,但用起来又简单的受不了。写机器学习的应用程序,肯定比开发安卓程序简单。之所以有这个判断,家林老师曾帮三星、摩托罗拉、高通、华为、中国电信、中国联通…….等通信公司做过安卓软件、硬件的整合,从底层到上层了如指掌,开发安卓应用程序有几个接口,如Activity、Service……...,安卓的接口比机器学习要多,而且涉及生命周期、回调…….,开发安卓程序比写机器学习代码要难,写深度学习程序也比写安卓程序简单很多。但这带来一个巨大的鸿沟,美国牢牢掌握了人工智能的制高点,因为什么都给你封装好了,你就是往里面输入一些数据,也不知道背后是怎么一回事,也可能知道一点点,但很难超越他们。接下来的30年是整个数学学科最辉煌的30年,因为我们发现,人工智能突然间把离散数学、线性代数、微积分、概率统计等内容的所有分支都衔接起来了,这将是数学最辉煌的年代,也是从事数学研究的人最辉煌的年代。总结一下,第一点,开发人工智能程序比你想象中的简单很多,如果不是从数学的路径去做人工智能,你的重要核心就是把背后的运用场景和运行机制搞透彻,在黑与白之间找到一个实际地带,让你可以驾驭人工智能,为企业创造价值和利润。第二点,如果不想做管理,人工智能提供了一条技术发展的路,但每天至少学一个小时的数学。

在Spyder集成环境全选以上代码,按Shift+Enter键运行,如图所示,y_pred是预测值,是100条测试数据的结果,图中截取了前8条数据。

640?wx_fmt=png

为了更好的观察结果,我们使用可视化的展示。

 
 

(7)sklearn.metrics导入confusion_matrix,y_test是测试集的真实值,y_pred是预测值。

1.  # Making the Confusion Matrix	
2.  from sklearn.metrics import confusion_matrix	
3.  cm = confusion_matrix(y_test, y_pred) 	


在Spyder集成环境全选以上代码,按Shift+Enter键运行,如图 所示,图中每一行之和表示此类别的实际样本数量,每一列之和表示被预测为此类别的样本数量。例如,索引为0的行说明有65个不购买的数据被正确预测为了不购买的类别,有3个不购买的数据被错误预测为了购买的类别,一共是68个实际不购买的数据。

640?wx_fmt=png

 
 

(8)可视化训练集的预测结果。

1.  # Visualising the Training set results	
2.  from matplotlib.colors import ListedColormap	
3.  X_set, y_set = X_train, y_train	
4.  X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),	
5.                       np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))	
6.  plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),	
7.               alpha = 0.75, cmap = ListedColormap(('red', 'green')))	
8.  plt.xlim(X1.min(), X1.max())	
9.  plt.ylim(X2.min(), X2.max())	
10.  for i, j in enumerate(np.unique(y_set)):	
11.      plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],	
12.                  c = ListedColormap(('red', 'green'))(i), label = j)	
13.  plt.title('Logistic Regression (Training set)')	
14.  plt.xlabel('Age')	
15.  plt.ylabel('Estimated Salary')	
16.  plt.legend()	
17.  plt.show() 	

np.meshgrid将x轴进行成不同的划分,x轴分成-3、-2、-1、0、1、2、3。在x_set, y_set = x_train, y_train代码中y_train是训练的结果,买或者不买;X_train是训练集中一条一条的数据。

在Spyder集成环境全选以上代码,按Shift+Enter键运行,如图所示,图是训练集的运行结果。

640?wx_fmt=png

640?wx_fmt=jpeg

 本文根据王家林老师《30个真实商业案例代码中成为AI实战专家(10大机器学习案例、13大深度学习案例、7大增强学习案例)课程》整理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

段智华

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

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

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

打赏作者

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

抵扣说明:

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

余额充值