文章目录
1、SkLearn 数据库鸢尾花数据集数据集划分 2、特征提取字典提取文本提取 3、特征预处理归一化标准化 4、特征降维特征选择Fitter(过滤式)Embedded(嵌入式) 5、实战分析探究用户对物品类别的喜好 6、SkLearn 转换估计器转换器估计器 7、KNN算法原理分析实战总结 8、模型选择与调优交叉验证超参数搜索 - 网格搜索实战分析1、SkLearn 数据库
鸢尾花数据集
'Sklearn 数据集使用'iris = load_iris()
数据集划分
'划分数据集'x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=25)
#/2、特征工程
2、特征提取
将任意数据转换成可以用于机器学习的数字特征:
字典提取(特征离散化)文本提取图像提取
字典提取
'字典特征提取 - DictVectorizer'data = [{'city': '北京', '温度': 100},{'city': '上海', '温度': 50},{'city': '芜湖', '温度': 80},]transfer = DictVectorizer(sparse=False)data_new = transfer.fit_transform(data)print(transfer.get_feature_names())print(data_new)
文本提取
'文本特征提取 - CountVectorizer'data = ['life is short,i like like python','l am the sugar peple']transfer = CountVectorizer()data_new = transfer.fit_transform(data)print(transfer.get_feature_names())print(data_new.toarray())'toarray 禁用稀疏矩阵''中文特征提取 - jieba - CountVectorizer'def cut_word(text):'分词接口'res = " ".join(list(jieba.cut(text)))return resdata = ['今天是美好的一天,我可真开心','我们看到的星空是大自然的力量,不可以破坏自然','了解事物的真正含义,取决于我们所了解的事物']data_new = []for i in data:data_new.append(cut_word(i))transfer = CountVectorizer()data_new2 = transfer.fit_transform(data_new)print(transfer.get_feature_names())print(data_new2.toarray())'文本特征提取 2 - TfidfVectorizer'data = ['今天是美好的一天,我可真开心','我们看到的星空是大自然的力量,不可以破坏自然','了解事物的真正含义,取决于我们所了解的事物']data_new = []for i in data:data_new.append(cut_word(i))transfer = TfidfVectorizer()data_new = transfer.fit_transform(data_new)print(transfer.get_feature_names())print(data_new.toarray())
3、特征预处理
通过转换函数,将数据转化成更适合算法模型数据的过程。
归一化/标准化:特征的单位、方差或者大小相差巨大,容易影响分析结果。
归一化
'归一化 - MinMaxScaler'data = pd.read_csv('data.txt')'取所有行,前三列'data = data.iloc[:,:3]transfer = MinMaxScaler(feature_range=[0,1])data_new = transfer.fit_transform(data)print(transfer.get_feature_names_out())print(data_new)
标准化
由于归一化采用的是最大值和最小值计算,如果许多异常点刚好是最大值或最小值,就会造成数据误差较大,故采用标准化。
'标准化'data = pd.read_csv('data.txt')'取所有行,前三列'data = data.iloc[:, :3]transfer = StandardScaler()data_new = transfer.fit_transform(data)print(transfer.get_feature_names_out())print(data_new)
4、特征降维
对二维数组进行降维:
降低特征个数(列数)降低特征相关性(冗余)
特征选择
从冗余或相关的数据中,找到主要特征。
Fitter(过滤式)
研究特征本身特点,特征与特征和:
方差选择法:低方差特征过滤相关系数:特征之间相关程度 选取其一加权求和主成分分析:维数压缩,高维数据->低维数据,可能会舍弃原变量,生成新变量
'低方差过滤'data = pd.read_csv('factor_returns.csv')data = data.iloc[:,1:-2]transfer = VarianceThreshold(threshold=5)data_new = transfer.fit_transform(data)print(transfer.get_feature_names_out())print(data_new)'相关系数'r = pearsonr(data["pe_ratio"],data["pb_ratio"])print(r)
相关性可以用 Matplotlib 画图来直观判断:
'图观相关性'plt.figure(figsize=(20,8), dpi=100)plt.scatter(data["revenue"],data["total_expense"])plt.show()
'主成分分析' data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]] transfer = PCA(n_components=2) data_new = transfer.fit_transform(data) print(data_new)
Embedded(嵌入式)
决策树正则化深度学习:卷积神经网络5、实战分析
探究用户对物品类别的喜好
import pandas as pdfrom sklearn.decomposition import PCA'导入表'order_products = pd.read_csv('order_products__prior.csv')products = pd.read_csv('products.csv')orders = pd.read_csv('orders.csv')aisles = pd.read_csv('aisles.csv')'合并表'temp1 = pd.merge(aisles,products,on=["aisle_id","aisle_id"])temp2 = pd.merge(temp1,order_products,on=["product_id","product_id"])temp3 = pd.merge(temp2,orders,on=["order_id","order_id"])'交叉表'table = pd.crosstab(temp3["user_id"],temp3["aisle"])'PCA降维'transfer = PCA(n_components=0.95)data_new = transfer.fit_transform(table)print(data_new)
6、SkLearn 转换估计器
转换器
上文中特征工程的步骤:
实例化转换器调用fit_transform
转换器有 3 种类型:
fit_fit_transform :综合下面两个fit :计算每一列平均值、标准差transform :(x-mean)/std 转换
估计器
估计器的种类:
分类估计器 sklearn.neighbors KNN算法sklearn.naive_bayes 贝叶斯算法sklearn.linear_model.LogisticRefression 逻辑回归算法sklearn.tree 决策树与随机森林 回归估计器 sklearn.linear_model.LinearRegression 线性回归算法sklearn.linear_model.Ridge 岭回归算法 无监督学习估计器 sklearn.cluster.KMeans 聚类算法
估计器工作流程:
估计器使用流程:
实例化估计器调用 fit模型评估 直接比对:y_predict = estimator.predict(x_test) , y_predict == y_test计算准确率:accuacy = estimator.score(x_test,y_test)
7、KNN算法
原理
定义:
如果一个样本在特征空间中的k 个最相似的样本中的大多数属于某一类别,则这个样本也是这个类别。
距离公式:
( a 1 − b 1 ) 2 + ( a 2 − b 2 ) 2 + ( a 3 − b 3 ) 2 \sqrt{(a1-b1)^2+(a2-b2)^2+(a3-b3)^2} (a1−b1)2+(a2−b2)2+(a3−b3)2
注意事项:
K 取得越大,样本不均衡影响。K 取得越小,受异常点影响。当样本特征相差较大时,需要进行无量纲化。
分析
假设现在有几部电影:
其中最后一个电影不知道是什么类型,使用 KNN 算法来预测它的类型。
实战
这里我们使用鸢尾花数据集,进行种类预测。
# 1、获取数据iris = load_iris()# 2、划分数据集x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6)# 3、特征工程:标准化transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4、KNN算法estimator = KNeighborsClassifier(n_neighbors=3)estimator.fit(x_train,y_trai# 5、模型评估# 方法1:直接对比预测值与真实值y_predict = estimator.predict(x_test)print("预测结果\n",y_predict)print("直接比对\n",y_test == y_predic# 方法2:计算准确率r = estimator.score(x_test,y_test)print("预测准确率\n",r)
总结
优点:
简单,易于理解,无需训练
缺点:
懒惰算法,样本大时内存开销大必须指定 K 值,K 值选择不当会导致分类精度误差大
使用场景:
小数据,几千~几万样本
8、模型选择与调优
交叉验证
将拿到的数据,分为训练和验证集。以下图为例,数据分成四份,其中 1 份做验证集,另外 3 份做测试集。经过四组测试,每次更换不同的验证集。将 4 组模型得到的结果,取平均值做最终结果。
为啥需要交叉验证?:
在样本较少时,让评估模型更加准确。
超参数搜索 - 网格搜索
每组超参数都采用交叉验证,最后选出最优的 K 值建立模型。
优化上节内容,对鸢尾花案例加上 K 值调优
# 1、获取数据iris = load_iris()# 2、划分数据集x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6)# 3、特征工程:标准化transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4、KNN算法estimator = KNeighborsClassifier()# 5、网格搜索交叉验证 - 由它来选择合适的 K 值param_dict = {"n_neighbors":[1,3,5,7,9,11]}estimator = GridSearchCV(estimator,param_grid=param_dict,cv=10)estimator.fit(x_train, y_train)# 6、模型评估# 方法1:直接对比预测值与真实值y_predict = estimator.predict(x_test)print("预测结果\n",y_predict)print("直接比对\n",y_test == y_predict)# 方法2:计算准确率r = estimator.score(x_test,y_test)print("预测准确率\n",r)# 7、最佳参数print("最佳参数\n",estimator.best_params_)print("最佳结果\n",estimator.best_score_)print("最佳估计器\n",estimator.best_estimator_)print("交叉验证结果\n",estimator.cv_results_)
实战分析
预测分析 FaceBook 签到位置
Jupyter 文件:FaceBook 分析过程下载
如果觉得《『机器学习』了解分类 回归 聚类算法 实现小规模预测》对你有帮助,请点赞、收藏,并留下你的观点哦!