欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 机器学习2

机器学习2

2024/11/20 2:34:37 来源:https://blog.csdn.net/h0039490/article/details/143860026  浏览:    关键词:机器学习2

三、特征工程

接机器学习1

4、特征降维

4.2、主成分分析PCA

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

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

        from sklearn.decomposition import PCA

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

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) = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2}(方法是勾股定理的多维使用)

1.2、曼哈顿距离

        每个方向的差距的绝对值之和, d(A, B) =|a_1 - b_1| + |a_2 - b_2| + \cdots + |a_n - b_n|

2、KNN算法原理

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

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

3、API

from sklearn.neighbors import KNeighborsClassifier

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

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

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

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

3.1、保留交叉验证

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

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、分层交叉验证

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、超参数搜索

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_)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com