Python机器学习及实践从零开始通往Kaggle竞赛之路之第二章 第一个程序比较SGD分类器和Line分类器在癌变数据集的预测效果

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']))

程序运行的结果:

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值