失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 『机器学习』了解分类 回归 聚类算法 实现小规模预测

『机器学习』了解分类 回归 聚类算法 实现小规模预测

时间:2020-06-20 23:31:03

相关推荐

『机器学习』了解分类 回归 聚类算法 实现小规模预测

文章目录

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 分析过程下载

如果觉得《『机器学习』了解分类 回归 聚类算法 实现小规模预测》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。