本节讲解逻辑回归案例实战。
(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条数据。
为了更好的观察结果,我们使用可视化的展示。
(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个实际不购买的数据。
(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键运行,如图所示,图是训练集的运行结果。
本文根据王家林老师《30个真实商业案例代码中成为AI实战专家(10大机器学习案例、13大深度学习案例、7大增强学习案例)课程》整理。