读《机器学习Python实践》笔记

sklearn库:分类模型、回归模型、聚类模型、降维模型、模型优化、数据预处理
在这里插入图片描述

一、第一个机器学习项目

1.1 导入类库

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import scipy
import sklearn
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC

1.2 导入数据

iris = pd.read_csv("C:\iris.csv")
#显示数据维度
print('数据维度: 行 %s,列 %s' % iris.shape)  # 数据维度: 行 150,列 5
# 查看数据的前10行
print(iris.head(10))
#    Sepal.Length  Sepal.Width  Petal.Length  Petal.Width Species
# 0           5.1          3.5           1.4          0.2  setosa
# 1           4.9          3.0           1.4          0.2  setosa
# 2           4.7          3.2           1.3          0.2  setosa
# 3           4.6          3.1           1.5          0.2  setosa
# 4           5.0          3.6           1.4          0.2  setosa
# 5           5.4          3.9           1.7          0.4  setosa
# 6           4.6          3.4           1.4          0.3  setosa
# 7           5.0          3.4           1.5          0.2  setosa
# 8           4.4          2.9           1.4          0.2  setosa
# 9           4.9          3.1           1.5          0.1  setosa
# 统计描述数据信息
print(iris.describe())
#        Sepal.Length  Sepal.Width  Petal.Length  Petal.Width
# count    150.000000   150.000000    150.000000   150.000000
# mean       5.843333     3.057333      3.758000     1.199333
# std        0.828066     0.435866      1.765298     0.762238
# min        4.300000     2.000000      1.000000     0.100000
# 25%        5.100000     2.800000      1.600000     0.300000
# 50%        5.800000     3.000000      4.350000     1.300000
# 75%        6.400000     3.300000      5.100000     1.800000
# max        7.900000     4.400000      6.900000     2.500000
# 分类分布情况
print(iris.groupby('Species').size())
# Species
# setosa        50
# versicolor    50
# virginica     50
# dtype: int64

1.3 箱线图

iris.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
plt.show()

在这里插入图片描述

1.4 直方图

iris.hist()
plt.show()

在这里插入图片描述

1.5 散点矩阵图

scatter_matrix(iris)
plt.show()

在这里插入图片描述

1.6 评估算法

通过不同的算法来创建模型,并评估它们的准确度,以便找到最合适的算法。

(1)分离出评估数据集。
(2)采用10折交叉验证来评估算法模型。
(3)生成6个不同的模型来预测新数据。
(4)选择最优模型。

1.6.1 分离数据集

保留一部分数据来评估算法模型,按照80%的训练数据集,20%的评估数据集来分离数据

array = iris.values
X = array[:, 0:4] # data
Y = array[:, 4]  # target
validation_size = 0.2  # 20%为测试集
seed = 7
X_train, X_validation, Y_train, Y_validation = train_test_split(X, Y, test_size=validation_size, random_state=seed)


iris.shape  # (150, 5)
X_train.shape  # (120, 4)
X_validation.shape  # (30, 4)

Y_train.shape # (120,)
Y_validation.shape # (30,)

1.6.2 评估模式

在这里将通过10折交叉验证来分离训练数据集,并评估算法模型的准确度。10折交叉验证是随机地将数据分成10份:9份用来训练模型,1份用来评估算法

1.6.3 创建模型

线性算法

  • 线性回归 LR
  • 线性判别分析 LDA

非线性算法

  • K近邻 KNN
  • 分类与回归树 CART
  • 贝叶斯分类器 NB
  • 支持向量机 SVM

在每次对算法进行评估前都会重新设置随机数的种子,以确保每次对算法的评估都使用相同的数据集,保证算法评估的准确性。

# 算法审查
models = {}
models['LR'] = LogisticRegression()
models['LDA'] = LinearDiscriminantAnalysis()
models['KNN'] = KNeighborsClassifier()
models['CART'] = DecisionTreeClassifier()
models['NB'] = GaussianNB()
models['SVM'] = SVC()

1.6.4 选择最优模型

# 评估算法
results = []
for key in models:
    kfold = KFold(n_splits=10, random_state=seed)
    cv_results = cross_val_score(models[key], X_train, Y_train, cv=kfold, scoring='accuracy')
    results.append(cv_results)
    print('模型 %s: 平均 %f (标准差 %f)' %(key, cv_results.mean(), cv_results.std()))
LR:0.966667(0.040825)
LDA:0.975000(0.038188)
KNN:0.983333 (0.033333)
CART:0.975000 (0.038188)
NB:0.975000(0.053359)
SVM:0.991667(0.025000)
data.dtypes

set  option(’ display.width  ’, l  00)
#设置数据的精确度
set  option  (’ precision ’, 4)
ata.describe()


data.groupby (‘y’) .size()

数据属性的相关性是指数据的两个属性是否互相影响

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值