机器学习2

三、特征工程

接机器学习1

4、特征降维

4.2、主成分分析PCA

从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴上的投影能够最大程度地保留数据的方差,同时减少数据的维度。

保留信息/丢失信息=信息保留的比例

from sklearn.decomposition import PCA

参数:n_coponents (小数表示信息比列,整数表示维度,也就是特征多少)

python 复制代码
from sklearn.decomposition import PCA
data = [[2,8,4,5], 
        [6,3,0,8], 
        [5,4,9,1]]
# 实例化一个转化器对象,降维后保留百分之九十五的信息
transfer1 = PCA(n_components=0.95)
data_new1 = transfer1.fit_transform(data)
transfer2 = PCA(n_components=2)
data_new2 = transfer2.fit_transform(data)
print("data_new1:\n",data_new1)
print("data_new2:\n",data_new2)

四、常用算法分类以及步骤

1、实例化预估器

estimator = 预估器方法()

1.1、用于分类的预估器

sklearn.neighbors.KNeighborsClassifier k-近邻

sklearn.naive_bayes.MultinomialNB 贝叶斯

sklearn.linear_model.LogisticRegressioon 逻辑回归

sklearn.tree.DecisionTreeClassifier 决策树

sklearn.ensemble.RandomForestClassifier 随机森林

1.2、用于回归的预估器

sklearn.linear_model.LinearRegression 线性回归

sklearn.linear_model.Ridge 岭回归

1.3、用于无监督学习的预估器

sklearn.cluster.KMeans 聚类

2、训练( fit

estimator.fit(x_train, y_train)

3、评估

3.1、直接对比 predict

y_predict = estimator.predict(x_test)

y_test == y_predict

3.2、计算准确率 score

accuracy = estimator.score(x_test, y_test)

4、保存模型

import joblib

4.1、保存模型

joblib.dunm(预估器实列化的名称,"路径/名称.pkl")

4.2、使用模型

joblib.load("路径/名称.pkl")

5、模型选择与调优

from sklearn.modele_selection import 具体方法名称

四类方法案例看第五点的KNN算法优化。

5.1、保留交叉验证

train_test_split,简单划分数据集为train和test两类

缺点:1、造成了部分数据不能用于训练模型。2、若类型多,单个类型数据少,那么可能训练没有该类数据,那么之类数据不能被预测。

5.2、k-折交叉验证

KFold/,将数据集划分为k个份数,使用一个份数作为测试,剩下全部用于训练,重复k次,每个数据都能用于训练和测试。

方法:调用预估器的split方法划分数据,返回训练下标和测试下标(迭代器,每次返回一种);在之后正常fit和score得到本次数据集结果,循环到迭代器空。

缺点:并未解决多类别少数据造成的训练类别缺失导致准确率低。

5.3、分层交叉验证

tratifiedKFold,在KFold基础上添加分层,保障每次都由全部的类别可以训练。(流程、参数、结果的操作方法与KFold一致)

5.4、超参数搜索(网格搜索)

上述三类验证都是基于明确操作之后的方法,网格搜索可以变更算法的参数,得到最优设置。

方法:GridSearchCV , 参数1为算法对象;参数2为param_grid 字典形式,键为算法参数名称,值为设置对象,一般为可迭代对象);参数3为cv ,整数,表示交叉验证次数。在KNN中为estimator = GridSearchCV(算法实例化对象, param_grid={"n_neighbors": [1, 3, 5, 7, 9, 11]}, cv=10)

属性:best_params_ 最优参数

best_score_ 最优分数

best_index_ 最优参数下标

best_estimator_ 最优的预估器

cv_results_ 交叉验证描述

五、KNN算法

1、样本距离

1.1、欧式距离

每个方向上的差距平方之后的和的开方, d(A, B) = (方法是勾股定理的多维使用)

1.2、曼哈顿距离

每个方向的差距的绝对值之和, d(A, B) =|

2、KNN算法原理

某个样本的类别:在特征空间内找出距离最近的多个样本,判断这些样本类别最多的一个就是该样本类别。

缺点:对于大量数据集,该方法会全部进行距离运算,就造成了数据计算量太大

3、API

from sklearn.neighbors import KNeighborsClassifier

参数:n_neighbors 整数,代表最近的多少个样本

属性:fit 传入训练数据和训练数据目标

predict 根据传入的测试数据返回类型

score 传入测试数据和测试数据目标,得到准确率

3.1、保留交叉验证

python 复制代码
from sklearn.datasets import load_wine
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 生成标准化工具
transfer = StandardScaler()
# 加载数据集
wine = load_wine()
# 将数据集的数据转化成标准数据
wine_date1 = transfer.fit_transform(wine.data)
# 将标准数据和目标划分
x_train, x_test, y_train, y_test = train_test_split(wine_date1, wine.target, train_size=0.75, random_state=666, stratify=wine.target)
print(x_train.shape,y_train.shape,x_test.shape,y_test.shape)

# 生成模型工具,判断距离最近的七个内容
model = KNeighborsClassifier(n_neighbors=7)
# 传入标准化的训练数据和对应结果
model.fit(x_train, y_train)
# 传入标准化的测试数据得到模型预测结果
# 方式1
y_test_result = model.predict(x_test)
res = y_test_result==y_test
# 方式2
score = model.score( x_test,y_test)
score

3.2、KFold

python 复制代码
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler

# 获取数据集和目标集
x,y = load_iris(return_X_y=True)
# 使用分层k折交叉验证  n_splits折叠次数, shuffle 打乱顺序 ,random_state 随机值,保障重复
folder = KFold(n_splits=5, shuffle=True, random_state=666)
# 根据分层折叠,划分数据集并返回下标
iter = folder.split(x,y)
# 创建模型对象
knn = KNeighborsClassifier(n_neighbors=5)
# 创建标准化工具
transfer = StandardScaler()
# 使用空列表存储五次折叠中的每个计算结果
score = []
score_standard = []
# 循环取出五次折叠的数据下标
for train_index, test_index in iter:
    # 未标准化数据
    knn.fit(x[train_index],y[train_index])
    score.append(knn.score(x[test_index], y[test_index]))

    # 标准化数据
    # 将训练数据标准化
    x_train_data = transfer.fit_transform(x[train_index])
    # genuine下标获取对应训练数据和目标结果传入模型训练
    knn.fit(x_train_data,y[train_index])
    # 对测试数据标准化
    x_test_data = transfer.transform(x[test_index])
    # 根据测试数据获得准确率,存入列表
    score_standard.append(knn.score(x_test_data, y[test_index]))
# 根据分层折叠,划分数据集并返回下标
print(score,'\n', sum(score)/len(score))
print(score_standard,'\n', sum(score_standard)/len(score_standard))

3.3、分层交叉验证

python 复制代码
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.preprocessing import StandardScaler

# 获取数据集和目标集
x,y = load_iris(return_X_y=True)
# 使用分层k折交叉验证  n_splits折叠次数, shuffle 打乱顺序 ,random_state 随机值,保障重复
folder = StratifiedKFold(n_splits=5, shuffle=True, random_state=666)
# 根据分层折叠,划分数据集并返回下标
iter = folder.split(x,y)
# 创建模型对象
knn = KNeighborsClassifier(n_neighbors=5)
# 创建标准化工具
transfer = StandardScaler()
# 使用空列表存储五次折叠中的每个计算结果
score = []
score_standard = []
# 循环取出五次折叠的数据下标
for train_index, test_index in iter:
    # 未标准化数据
    knn.fit(x[train_index],y[train_index])
    score.append(knn.score(x[test_index], y[test_index]))

    # 标准化数据
    # 将训练数据标准化
    x_train_data = transfer.fit_transform(x[train_index])
    # genuine下标获取对应训练数据和目标结果传入模型训练
    knn.fit(x_train_data,y[train_index])
    # 对测试数据标准化
    x_test_data = transfer.transform(x[test_index])
    # 根据测试数据获得准确率,存入列表
    score_standard.append(knn.score(x_test_data, y[test_index]))
# 根据分层折叠,划分数据集并返回下标
print(score,'\n', sum(score)/len(score))
print(score_standard,'\n', sum(score_standard)/len(score_standard))

3.4、超参数搜索

python 复制代码
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV


# 获取数据集和目标集
x,y = load_iris(return_X_y=True)
#x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25,shuffle=True, random_state=666)
# 创建模型对象
knn = KNeighborsClassifier()
# 进行网格搜索和交叉验证
knn = GridSearchCV(knn,param_grid={'n_neighbors' :range(1,11,2)},cv=15)
knn.fit(x,y)

print("最佳参数:\n", knn.best_params_) 
# 最佳结果:best_score_
print("在训练集中的准确率:\n", knn.best_score_)  
# 最佳估计器:best_estimator_
print("最佳估计器:\n", knn.best_estimator_) 
# 交叉验证结果:cv_results_
print("交叉验证过程描述:\n", knn.cv_results_)
#最佳参数组合的索引:最佳k在列表中的下标
print("最佳参数组合的索引:\n",knn.best_index_)
相关推荐
王亭_6664 分钟前
PyTorch使用教程-深度学习框架
大数据·人工智能·pytorch·深度学习·机器学习
禾风wyh5 分钟前
【Pytorch】torch.nn.functional模块中的非线性激活函数
人工智能·pytorch·深度学习
YRr YRr5 分钟前
如何将 Anaconda 源切换到国内镜像以提高下载速度:详细教程 ubuntu20.04 Pytorch
人工智能·pytorch·python
C7211BA9 分钟前
卷积神经网络 (CNN)
人工智能·神经网络·cnn
环境感知13 分钟前
基于MATLAB的激光雷达与相机联合标定原理及实现方法——以标定板为例
开发语言·人工智能·数码相机·算法·matlab
Kakaxiii20 分钟前
2020.7 官方综述-UMLS users and uses: a current overview
人工智能
标贝科技1 小时前
标贝科技:AI基础数据服务,人工智能行业发展的底层支撑
人工智能·机器学习·语言模型·数据挖掘·自动驾驶·database·big data
blzlh1 小时前
训练神经网络Brain机器学习,AI与前端的完美融合
前端·javascript·机器学习
Sui_Network2 小时前
World Wide Walrus:下一代数据存储协议
大数据·人工智能·web3·去中心化·区块链
一水鉴天2 小时前
智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序6 进化论及科学的信息技术创新:分布式账本/区块链/智能合约
开发语言·人工智能·学习·区块链·智能合约·分布式账本