Python机器学习及实践从零开始通往Kaggle竞赛之路中百度云盘链接:
前言:第一章主要介绍的是机器学习中相关的概念,可以自行阅读就不在介绍了。我的介绍方式主要是简单的分析书中代码,为了方便阅读并将其按照pycharm实现。本章节可以分成两个部分:第一个部分是对数据集进行分类,第二个部分是对数据集进行回归分析。代码中程序的命名的规则是:第几个程序 + 使用的模型 + 数据集,利用第一个程序:First-Program-Line-Canner。只是简单地实现书中代码,其中相关函数的以及具体算法后期再完善。
1: 分类学习
1.1、 使用线性分类器对预测癌变的细胞,注意源数据集中第一行是数据集中属性列,如果不去除的话会影响fit_transform()函数,所以训练的时候记得要把第一行数据给清除掉。因为不太熟悉pandas所以我的做法是直接把第一行删除了,书中说线性分类器的结果要优于使用SGD的结果 但是代码应该有问题可以更新一下。
直观上说LogisticRegression()线性分类器的目标是找到一个函数尽可能将数据分成不同的部分。具体见下图。
代码实现:
# -*- coding: utf-8 -*-
# @Time : 2019/4/7 23:26
# @Author : YYLin
# @Email : 854280599@qq.com
# @File : First-Program-Line-Canner.py
import pandas as pd
import numpy as np
# 导入程序所需要的标准化和线性回归和SGD梯度下降法分类
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import classification_report
column_names = ['Clump Thickness', 'Cell Size', 'Type']
# 使用pandas.read_csv函数从互联网读取指定数据。
data = pd.read_csv('../Dataset/Tencent-Datasets/Breast-Cancer/breast-cancer-train.csv', names = column_names )
print("加载数据集的类别和形状",type(data), data.shape)
# 在源代码中所给的程序之中并没有值为NAN和空缺的数据集 所以不使用这两种方法也可以
data = data.replace(to_replace='?', value=np.nan)
data = data.dropna(how='any')
print("经过丢弃和填补缺失值之后前5行数据以及形状:",data.shape)
# 和原始数据集不同 源码中给出的代码只有三列 所以程序中训练中有所改变
X_train, X_test, y_train, y_test = train_test_split(data[column_names[1:2]],
data[column_names[2]], test_size=0.25, random_state=33)
# 标准化数据,保证每个维度的特征数据方差为1,均值为0。使得预测结果不会被某些维度过大的特征值而主导。
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)
# 使用线性回归进行预测数据集的类别
lr = LogisticRegression()
lr.fit(X_train, y_train)
lr_y_predict = lr.predict(X_test)
# 使用SGD回归预测数据集的类别 fit可以看成是进行训练的数据
sgdc = SGDClassifier()
sgdc.fit(X_train, y_train)
sgdc_y_predict = sgdc.predict(X_test)
print('-------------显示使用linear线性分类器数据分类的结果--------------\n')
print('Accuracy of LR Classifier:', lr.score(X_test, y_test))
print(classification_report(y_test, lr_y_predict, target_names=['Benign', 'Malignant']))
print('-------------显示使用SGD分类数据分类的结果--------------\n')
print('Accuarcy of SGD Classifier:', sgdc.score(X_test, y_test))
print(classification_report(y_test, sgdc_y_predict, target_names=['Benign', 'Malignant']))
程序运行的结果: