Python机器学习及实践(一、分类学习——线性分类器)

Python机器学习及实践(一、分类学习——线性分类器)

线性分类器通过特征的线性组合来做出分类决定,以达到此种目的。对象的特征通常被描述为特征值,而在向量中则描述为特征向量。

线性分类器简介

代码及注释

输入:

import pandas as pd
import numpy as np
column_names = ['Sample code number','Clump Thickness','Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']
#read_csv还可以在线读取数据
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',names=column_names)
#nan用来标识未标记的数据 和None类似 但又有一些区别
data=data.replace(to_replace='?',value=np.nan)
#DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
#axis:
#axis=0: 删除包含缺失值的行
#axis=1: 删除包含缺失值的列
#how: 与axis配合使用
#how=‘any’ :只要有缺失值出现,就删除该行货列
#how=‘all’: 所有的值都缺失,才删除行或列
#thresh: axis中至少有thresh个非缺失值,否则删除
#比如 axis=0,thresh=10:标识如果该行中非缺失值的数量小于10,将删除改行
#subset: list
#在哪些列中查看是否有缺失值
#inplace: 是否在原数据上操作。如果为真,返回None否则返回新的copy,去掉了缺失值
data=data.dropna(how='any')
data.shape
#逻辑回归 梯度下降分类
#train_test_split用于分割数据
from sklearn.model_selection import train_test_split 
#X_train,X_test, y_train, y_test = cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0)
X_train,X_test, y_train, y_test = train_test_split(data[column_names[1:10]],data[column_names[10]],test_size=0.25, random_state=33)
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
#标准化数据 类似即归一化
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.fit_transform(X_test)
lr=LogisticRegression()
sgdc=SGDClassifier()
lr.fit(X_train,y_train)
lr_y_predict=lr.predict(X_test)
sgdc.fit(X_train,y_train)
sgdc_y_predict=sgdc.predict(X_test)
from sklearn.metrics import classification_report
print('Accuracy of LR Classifier:',lr.score(X_test,y_test))
#classification_report 输出准确率 F1值等模板
print(classification_report(y_test,lr_y_predict,target_names=['Benign','Malignant']))
print('Accuracy of SGD Classifier:',sgdc.score(X_test,y_test))
#classification_report 输出准确率 F1值等模板
print(classification_report(y_test,sgdc_y_predict,target_names=['Benign','Malignant']))

输出:

Accuracy of LR Classifier: 0.9707602339181286
              precision    recall  f1-score   support

      Benign       0.96      0.99      0.98       100
   Malignant       0.99      0.94      0.96        71

    accuracy                           0.97       171
   macro avg       0.97      0.97      0.97       171
weighted avg       0.97      0.97      0.97       171

Accuracy of SGD Classifier: 0.9590643274853801
              precision    recall  f1-score   support

      Benign       0.93      1.00      0.97       100
   Malignant       1.00      0.90      0.95        71

    accuracy                           0.96       171
   macro avg       0.97      0.95      0.96       171
weighted avg       0.96      0.96      0.96       171

知识点

1.numpy

是一个高性能数据计算的扩展包,支持大量维度的数组与矩阵计算

2.skearn.model_selection train_test_split

用于数据集的分割

X_train,X_test,y_train,y_test =  train_test_split(X, y, test_size=0.2, random_state=666,shuffle=True)
# Parameters:	
# *arrays :需要进行划分的X ;
# target :数据集的结果Y
# test_size :测试集占整个数据集的多少比例
# train_size :test_size +train_size = 1
# random_state : 随机种子
# shuffle : 是否洗牌 在进行划分前

————————————————
原文链接:https://blog.csdn.net/qq_41861526/article/details/88617840

3.value_counts()

用于查验样本数量和类别分布

4.from sklearn import preprocessing

机器学习中的数据预处理

4.1.scale 标准化:去均值,方差规模化

Standardization标准化:将特征数据的分布调整成标准正太分布,也叫高斯分布,也就是使得数据的均值维0,方差为1.

标准化的原因在于如果有些特征的方差过大,则会主导目标函数从而使参数估计器无法正确地去学习其他特征。

标准化的过程为两步:去均值的中心化(均值变为0);方差的规模化(方差变为1)。

在sklearn.preprocessing中提供了一个scale的方法,可以实现以上功能。

原文链接:https://blog.csdn.net/sinat_33761963/article/details/53433799import #### from sklearn import preprocessingStandardScaler

4.2.from sklearn. preprocessing import StandardScaler

在默认的情况下 StandardScaler就是减去均值,然后除以标准差
首先定义一个对象:

ss = sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True) 

在这里
copy; with_mean;with_std
默认的值都是True.

copy 如果为false,就会用归一化的值替代原来的值;如果被标准化的数据不是np.array或scipy.sparse CSR matrix, 原来的数据还是被copy而不是被替代

with_mean 在处理sparse CSR或者 CSC matrices 一定要设置False不然会超内存

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()

相当于:(原始数值−均值)/标准差

当然在StandardScaler中也可以设置参数with_mean和with_std

from sklearn.preprocessing import StandardScaler
sc = StandardScaler(with_mean=False)

等价于:原始数值/标准差

类似地

from sklearn.preprocessing import StandardScaler
sc = StandardScaler(with_std=False)

等价于:原始数值−均值

5.from sklearn.linear_model import LogisticRegression

逻辑回归法对数据进行预测:可以做概率预测,也可用于分类,仅能用于线性问题。通过计算真实值与预测值的概率,然后变换成损失函数,求损失函数最小值来计算模型参数,从而得出模型。

6.from sklearn.linear_model import SGDClassifier

梯度下降法对数据进行预测:梯度下降法(SGD)是一个简单有效的方法,用于判断使用凸loss函数(convex loss function)的分类器(SVM或logistic回归)。SGD被成功地应用在大规模稀疏机器学习问题上(large-scale and sparse machine learning),经常用在文本分类及自然语言处理上。

5、6注

  1. fit()、predict()、score()是经常会用到的。
    fit()用于根据给定的数据拟合模型(对训练集进行训练),predict()一般会传入测试样本然后得到预测值,score()用于评价模型,这里用的是平均精确度。
  2. fit_transform()的作用就是先拟合数据,然后转化它将其转化为标准形式,一般应用在训练集中。
    tranform()的作用是通过找中心和缩放等实现标准化,一般用在测试集中。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值