admin管理员组文章数量:1794759
机器学习分类算法
机器学习的步骤:
百度网盘:提取码:i523
一、K近邻算法:
基本定义:就近原则来确定类别,距离公式、K的取值:K值多小,容易受到异常值的影响、K值过大容易受到样本不均衡的影响,主要应用于数据量少的预测。
案例1:使用sklearn自带的数据集,对鸢尾花进行分类
# coding = utf-8 # 导入sklearn自带的数据集 from sklearn.datasets import load_iris # 导入训练集测试集的划分器 from sklearn.model_selection import train_test_split # 导入标准化库 from sklearn.preprocessing import StandardScaler # 导入KNN算法预估器 from sklearn.neighbors import KNeighborsClassifier # 导入网格搜索 from sklearn.model_selection import GridSearchCV def iris_knn_cv(): """ 用KNN算法对iris进行分类,网格搜索和交叉验证 :return: """ # 获取数据集 iris = load_iris() # 数据集划分 x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6) # random_state随机种子 # 标准化 # 实例化转换器 transfer = StandardScaler() # 调用转换器 # 训练集标准化 x_train = transfer.fit_transform(x_train) # 测试集标准化 x_test = transfer.transform(x_test) # KNN 算法预估器 # 实例化一个预估器类 estimator = KNeighborsClassifier(n_neighbors=6) # n_neighbors=6 相当于k=6 # 加入网格搜索和交叉验证 # 参数准备 params_dict = {'n_neighbors': [1, 3, 5, 7, 9, 11]} estimator = GridSearchCV(estimator, param_grid=params_dict, cv=10) estimator.fit(x_train, y_train) # 模型训练 estimator.fit(x_train, y_train) # 模型评估 # 方法1:直接比对真实值和预测值 y_predict = estimator.predict(x_test) print("y_predict:\\n", y_predict) print("直接比对真实值和预测值:\\n", y_test == y_predict) # 方法2:计算准确率 score = estimator.score(x_test, y_test) print("计算准确率方法:\\n", score) print("最佳参数:", estimator.best_params_) print("最佳结果:", estimator.best_score_) print("最佳预估器:", estimator.best_estimator_) print("交叉验证结果:", estimator.cv_results_) return None if __name__ == "__main__": iris_knn_cv()案例2:使用K近邻算法对face_boo用户签到预测
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import GridSearchCV data = pd.read_csv("D:\\\\机器学习\\\\数据集\\\\fece_book\\\\train.csv") # 缩小数据范围 data1 = data.query("x >2 & x <2.5 & y > 1.0 & y < 1.5") # 处理时间戳,unit="s"表示指点时间为s time_value = pd.to_datetime(data1["time"], unit="s") date = pd.DatetimeIndex(time_value) # 添加日期day data1["day"] = date.day # 添加星期 data1["week"] = date.week # 添加小时 data1["hour"] = date.hour # 过滤掉签到次数少的地点 place_count = data1["row_id"].groupby(by=data1["place_id"]).count() # 过滤掉签到次数小于3 place_count = place_count[place_count > 3] # 返回DataFrame data1_final = data1[data1["place_id"].isin(place_count.index.values)] # 筛选特征值和目标值 # 特征值 x = data1_final[["x", "y", "accuracy", "day", "week", "hour"]] # 目标值 y = data1_final["place_id"] # 数据集划分 x_train, x_test, y_train, y_test = train_test_split(x, y) # 特征工程 # 1、标准化 # 实例化转换器 transfer = StandardScaler() # 调用转换器 x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) # KNN算法预估器 estimator = KNeighborsClassifier() # 加入网格搜索与交叉验证 # 1、参数准备 params_dict = {"n_neighbors": [3, 5, 7, 9]} # 网格搜索 estimator = GridSearchCV(estimator, param_grid=params_dict, cv=3) estimator.fit(x_train, y_train) # 模型评估 # 方法1:直接比较真实值与预测值 y_predict = estimator.predict(x_test) print("y_predict:\\n", y_predict) print("直接比较真实值与预测值:\\n", y_test == y_predict) # 方法2:计算准确率 score = estimator.score(x_test, y_test) print("准确率:\\n", score) # 最佳参数 print("最佳参数:", estimator.best_params_) # 最佳结果 print("最佳结果:", estimator.best_score_) # 最佳预估器 print("最佳预估器:", estimator.best_estimator_) # 交叉验证结果 print("交叉验证结果:", estimator.cv_results_)
二、朴素贝叶斯算法:
1、朴素:假设特征与特征之间相互独立 2、贝叶斯:贝叶斯公式 3、拉普拉斯平滑系数 4、优点:对缺失数据不敏感,计算快 5、缺点:概率值与样本之间的关系 6、应用场景:文本分类案例3:用朴素贝叶斯对新闻文本分类、sklearn自带的数据集
# coding = utf-8 from sklearn.datasets import fetch_20newsgroups from sklearn.model_selection import train_test_split # 文本特征抽取 from sklearn.feature_extraction.text import TfidfVectorizer # 贝叶斯转换器 from sklearn.naive_bayes import MultinomialNB def nb_new(): """ 使用朴素贝叶斯算法对文本分类 :return: """ # 获取数据集,默认是训练集,改成all表示全部下载 data = fetch_20newsgroups(subset="all") # 数据集的划分 x_train, x_test, y_train, y_test = train_test_split(data.data, data.target) # 特征工程,文本特征抽取 # 实例化转换器 transfer = TfidfVectorizer() # 调用转换器 x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) # 贝叶斯算法预估器 estimator = MultinomialNB() # 模型训练 estimator.fit(x_train, y_train) # 模型评估 # 方法1:直接比对真实值与预测值 y_predict = estimator.predict(x_test) print("y_predict", y_predict) print("直接比对真实值与预测值:\\n", y_test == y_predict) # 方法2:计算准确率 score = estimator.score(x_test, y_test) print("计算准确率:", score) print("x_train", x_train) return None nb_new()三、决策树
1、决策:找到最高效的决策顺序 -- 信增益,信增益:信熵 - 条件熵
2、优点:能够可视化、可解释能力强
3、缺点:容易过拟合
案例4:决策树对泰坦尼克乘客生存预测
import pandas as pd # 字典特征抽取 from sklearn.feature_extraction import DictVectorizer # 数据集划分 from sklearn.model_selection import train_test_split # 决策数预估器 from sklearn.tree import DecisionTreeClassifier, export_graphviz titanic = pd.read_csv('./titanic/train.csv') # 赛选特征值和目标值的选择 # 1、特征值 x = titanic[["Pclass", "Sex", "Age"]] y = titanic[["Survived"]] # 缺失值的处理, 2 Age 714 non-null float64 # 年龄段有缺失值,使用平均值填充 x.loc[:, "Age"].fillna(x["Age"].mean(), inplace=True) # 转换成字典,orient="records"表示转换的格式 x = x.to_dict(orient="records") # 数据集的划分 x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22) # random_state=22 随机种子 # 实例化字典转换器 transfer = DictVectorizer() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) # 实例化预估器 estimator = DecisionTreeClassifier(criterion="entropy") # criterion="entropy"计算信增益 # 模型训练 estimator.fit(x_train, y_train) # 模型评估 # 计算准确率 score = estimator.score(x_test, y_test) print("计算准确率:", score) # 决策树可视化 export_graphviz(estimator, out_file="./决策树可视化泰坦尼克.dot", feature_names=transfer.get_feature_names())四、随机森林:
1、随机: 训练集随机 特征随机:降维,降低模型复杂度 2、森林:多个决策树 3、应用场景:高维度特征,大数据案例5:随机森林泰坦尼克乘客生存预测
import pandas as pd from sklearn.model_selection import train_test_split # 网格搜索 from sklearn.model_selection import GridSearchCV # 集成方法中的随机森林 from sklearn.ensemble import RandomForestClassifier from sklearn.feature_extraction import DictVectorizer data = pd.read_csv('titanic/train.csv') # 特征值和目标值的筛选 # 1、特征值 x = data[["Pclass", "Sex", "Age"]] y = data[["Survived"]] # 年龄缺失值的填充,平均值填充 x.loc[:, "Age"].fillna(x["Age"].mean(), inplace=True) # 特征抽取 转换成字典,orient="records"表示转换的格式 x = x.to_dict(orient="records") # 数据集划分 x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22) # random_state=22 随机种子 # 实例化字典转换器 transfer = DictVectorizer() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) # 随机森林 estimator = RandomForestClassifier() # 加入网格搜索和交叉验证 param_dict = {"n_estimators": [120, 240, 330, 500, 800, 1200], "max_depth": [5, 7, 9, 13, 24, 36]} # 交叉验证和网格搜索 estimator = GridSearchCV(estimator, param_grid=param_dict, cv=3) estimator.fit(x_train, y_train) # 模型评估 # 计算准确率 score = estimator.score(x_test, y_test) print("准确率:", score) # 最佳参数 print("最佳参数:", estimator.best_params_) print("最佳结果:", estimator.best_score_) print("最佳预估器:", estimator.best_estimator_) print("交叉验证结果:", estimator.cv_results_)五、总结
分类算法:1、K近邻算法:适用于数据量小的分类
2、朴素贝叶斯:适用于文本分类,特征与特征之间要相互独立
3、决策树:适用于需要可视化的流程
4、随机森林:适用于高维度特征、大数据场景。
版权声明:本文标题:机器学习分类算法 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686510508a75731.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论