2024-11-13 学习人工智能的Day26 sklearn(2)

[复制链接]
发表于 2025-12-26 08:31:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
特性选择

VarianceThreshold(低方差过滤特性选择):
雷同于之前openCV中的threshold函数,只是此在创建实例工具时在参数中设置用于筛选的阈值。由于现在来说根本全部的工具的利用方式大抵雷同,都是引用后举行调用。
emm,根据AI的复兴:在利用fit后,方法自己并不返回固定值,只是更新模子的属性,而在此方法中,这些属性包罗了特性方差等信息。
我不明白的点:由于我在创建实例对象时就已经设定了阈值参数,然后在我fit后我留下应该是必要的特性,而当我利用transform时,应该是直接根据我fit获取必要特性直接提取这些特性。
我的明白有误,fit方法并不返回任何值,它只盘算练习数据会集每个特性的方差并记载,还确定了那些特性的方差高于阈值,这些信息被储存在variances_属性中,它还储存了一个实际利用的阈值,当用户没有指定时,这个值由fit来盘算,末了储存在threshold _属性中,注意是fit究竟上并不会修改任何值
fit更新后,transform利用更新后的方差和阈值举行特性过滤,而tranform则是实际实验特性选择的地方
  1. from sklearn.feature_selection import VarianceThreshold
  2. import pandas as pd
  3. data=pd.DataFrame([[10,1],[11,3],[11,1],[11,5],[11,9],[11,3],[11,2],[11,6]])
  4. transfer = VarianceThreshold(threshold=1.5)# 设置阈值方差
  5. res = transfer.fit_transform(data)
  6. print(res)
复制代码
根据干系系数的特性选择
这里的系数就是利用皮尔逊系数来举行判定了。从scipy.stats中引入pearsonr方法,此方法返回的是两个值,一个statistic,此数的范围为[-1,1],其值越靠近双方的1干系性越强,而另一个职为pvalue这个值只做相识,它是数值越小越干系。
主因素分析(PCA)

没有办法很清楚的表明,大抵的表明只能是:PCA的焦点目的是从原始特性空间中找到一个新的坐标体系,使得数据在新坐标轴上的投影可以或许最大程度地生存数据的方差,同时淘汰数据的维度。
然后就只能先容一下PCA的用法,
  1. from sklearn.decomposition import PCA
  2. # 然后是方法的调用
  3. data = [[2,8,4,5],
  4.         [6,3,0,8],
  5.         [5,4,9,1]]
  6. transfer = PCA(n_components=2)
  7. # 注意的是PCA的实例创建时的参数,n_components,当它为大于一的整数时,表示减少至多少特征
  8. # 当它为小于1大于0的小数时,表示保留多少比例的信息
  9. res = transfer.fit_transform(data)
  10. print(res)
复制代码
KNN算法

K-近邻算法,根据K个邻人样本的种别来判定当前样本的种别;
假如一个样本在特性空间中的k个最相似(最相近)样本中的大多数属于某个种别,则该类本也属于这个种别
比如: 有10000个样本,选出7个到样本A的隔断迩来的,然后这7个样本中假设:种别1有2个,种别2有3个,种别3有2个.那么就以为A样本属于种别2,由于它的7个邻人中 种别2最多(近朱者赤近墨者黑)
  1. from sklearn.neighbors import KNeighborsClassifier
  2. from sklearn.datasets import load_iris
  3. from sklearn.model_selection import train_test_split
  4. from sklearn.preprocessing import StandardScaler
  5. iris = load_iris()
  6. x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=22)
  7. standard = StandardScaler()
  8. x_train = standard.fit_transform(x_train)
  9. x_test = standard.transform(x_test)
  10. transfer = KNeighborsClassifier(n_neighbors=7)
  11. transfer.fit(x_train,y_train)
  12. y_predict = transfer.predict(x_test)
  13. score = transfer.score(x_test,y_test)
  14. score
复制代码
交错验证

1 .生存交错验证
在这种交错验证技能中,整个数据集被随机地分别为练习集和验证集。根据履历法则,整个数据集的近70%被用作练习集,别的30%被用作验证集。也就是我们最常利用的,直接分别数据集的方法。
长处:很简单很容易实验
缺点:不适当不平衡的数据集,一大块数据被剥夺了练习模子的时机
2.k-折交错验证
K-Fold交错验证技能中,整个数据集被分别为K个巨细雷同的部分。每个分区被称为 一个”Fold”。以是我们有K个部分,我们称之为K-Fold。一个Fold被用作验证集,别的的K-1个Fold被用作练习集。
3.分层k-折交错验证Stratified k-fold
K-折交错验证的变种, 分层的意思是说在每一折中都保持着原始数据中各个种别的比例关系,比如说:原始数据有3类,比例为1:2:1,接纳3折分层交错验证,那么分别的3折中,每一折中的数据种别保持着1:2:1的比例,如许的验证效果更加可信。
例子的话是关于k-折交错验证的
  1. # 分层k-折交叉验证
  2. from sklearn.datasets import load_iris
  3. from sklearn.model_selection import StratifiedKFold
  4. from sklearn.preprocessing import StandardScaler
  5. from sklearn.neighbors import KNeighborsClassifier
  6. #  加载数据
  7. iris = load_iris()
  8. x = iris.data
  9. y = iris.target
  10. # 初始化分层k-折交叉验证器
  11. strat_k_fold = StratifiedKFold(n_splits=5,shuffle=True,random_state=42)
  12. # 创建一个k近邻分类器实例
  13. knn = KNeighborsClassifier(n_neighbors=7)
  14. # # 进行交叉认证
  15. accuracies = []
  16. for train_index ,test_index in strat_k_fold.split(x,y):
  17.         x_train,x_test = x[train_index],x[test_index]
  18.         y_train,y_test = y[train_index],y[test_index]
  19.         # 数据预处理(标准化)
  20.         scaler = StandardScaler()
  21.         x_train_scaler = scaler.fit_transform(x_train)
  22.         x_test_scaler = scaler.transform(x_test)
  23.         # 使用k近邻分类器进行训练
  24.         knn.fit(x_train_scaler,y_train)
  25.         # # 输出每次折叠的准确得分
  26.         score = knn.score(x_test,y_test)
  27.         # print(score)
  28.         accuracies.append(score)
  29. print(sum(accuracies)/len(accuracies)) # 平均得分
复制代码
超参数搜刮

本日老师讲的末了的一个题目
超参数搜刮也叫网格搜刮(Grid Search)
比如在KNN算法中,k是一个可以人为设置的参数,以是就是一个超参数。网格搜刮能主动的资助我们找到最好的超参数值。
  1. from sklearn.model_selection import GridSearchCV
  2. 此API同时进行交叉验证和网格搜索,而GridSearchCV实际也是一个估计器,它有以下几个重要的参数:
  3.       best_params_  最佳参数
  4.       best_score_ 在训练集中的准确率
  5.       best_estimator_ 最佳估计器
  6.       cv_results_ 交叉验证过程描述
  7.       best_index_最佳k在列表中的下标
复制代码
仍旧是鸢尾花的分类示例
  1. #%%
  2. from sklearn.model_selection import GridSearchCV
  3. from sklearn.datasets import load_iris
  4. from sklearn.preprocessing import StandardScaler
  5. from sklearn.neighbors import KNeighborsClassifier
  6. from sklearn.model_selection import train_test_split
  7. iris = load_iris()
  8. x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=22)
  9. standard = StandardScaler()
  10. x_train = standard.fit_transform(x_train)
  11. x_test = standard.transform(x_test)
  12. knn = KNeighborsClassifier()
  13. estimator = GridSearchCV(estimator=knn,param_grid={"n_neighbors":[1,3,5,7,9,11]},cv=5)
  14. estimator.fit(x_train,y_train)
  15. # 方法2:计算准确率
  16. score = estimator.score(x_test, y_test)
  17. print("在测试集中的准确率为:\n", score)  #0.9736842105263158
  18. # 最佳参数:best_params_
  19. print("最佳参数:\n", estimator.best_params_) #{'n_neighbors': 3}, 说明k=3时最好
  20. # 最佳结果:best_score_
  21. print("在训练集中的准确率:\n", estimator.best_score_)  #0.9553030303030303
  22. # 最佳估计器:best_estimator_
  23. print("最佳估计器:\n", estimator.best_estimator_) # KNeighborsClassifier(n_neighbors=3)
  24. # 交叉验证结果:cv_results_
  25. print("交叉验证过程描述:\n", estimator.cv_results_)
  26. #最佳参数组合的索引:最佳k在列表中的下标
  27. print("最佳参数组合的索引:\n",estimator.best_index_)
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表