什么是机器学习
机器学习是根据大量现有的数据,找出一个基本拟合的函数(模型),并根据该函数对新数据进行预测、决策、分类等技术。
比如,现有数据:
身高 | 体重 |
---|---|
160 | 120 |
170 | 130 |
180 | 140 |
假设身高=x,体重=y,最拟合的函数是 y = 1 * x + 40
那么根据函数,我们预测身高=190的人,体重=150
以上例子是理想的情况,实际我们接触的数据远比它大,维度(列)也多,不能轻易地给出一个完全拟合的函数,但是我们仍然有办法找到该函数,这个过程就是机器学习的过程。
开始练习
安装环境
- pip3 install virtualenv
- virtualenv ai_python
- source ./ai_python/bin/activate
安装依赖库
- pip install numpy # 数值处理库
- pip install pillow # 简单的图像处理库
- pip install –upgrade scikit-learn # 包含多种机器学习算法的工具包
- pip install tensorflow # 深度学习库
- pip install keras # 深度学习库
- pip install opencv-contrib-python # 图像识别工具
- pip install –upgrade imutils # 图像处理库
引入算法库
- KNN
- 朴素贝叶斯
- 逻辑回归
- SVM
- 决策树
- 随机森林
- 感知机
准备数据
鸢尾花数据集(部分),共计150条记录,包含 setosa,versicolor,virginica 三种花型
叶片长度 | 叶片宽度 | 花瓣长度 | 花瓣宽度 | 鸢尾花类型 |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa |
6.9 | 3.1 | 4.9 | 1.5 | versicolor |
7.7 | 2.8 | 6.7 | 2.0 | virginica |
6.1 | 3.0 | 4.9 | 1.8 | virginica |
6.2 | 2.2 | 4.5 | 1.5 | versicolor |
测试
# coding: utf-8
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.datasets import load_iris
import argparse
# 根据参数选择模型
ap = argparse.ArgumentParser()
ap.add_argument("-m", "--model", type=str, default="knn", help="请输入模型简称")
args = vars(ap.parse_args())
models = {
"knn": KNeighborsClassifier(n_neighbors=1),
"naive_bayes": GaussianNB(),
"logit": LogisticRegression(solver="lbfgs", multi_class="auto"),
"svm": SVC(kernel="rbf", gamma="auto"),
"decision_tree": DecisionTreeClassifier(),
"random_forest": RandomForestClassifier(n_estimators=100),
"mlp": MLPClassifier()
}
# 载入鸢尾花数据集,然后进行训练集和测试集的划分,75%数据作为训练集,其余25%作为测试集
# random_state是随机状态,类似随机种子
print("载入鸢尾花数据集...")
dataset = load_iris()
(trainX, testX, trainY, testY) = train_test_split(dataset.data, dataset.target, random_state=3, test_size=0.25)
# 训练模型
print("正在使用模型:'{}'".format(args["model"]))
model = models[args["model"]]
model.fit(trainX, trainY)
# 预测并输出一份分类结果报告
print("生成结果报告")
predictions = model.predict(testX)
print(classification_report(testY, predictions, target_names=dataset.target_names))
结果报告
报告解析
举个例子,现有100人,专家预测大概30人为阳性,70人为阴性,现在有一个模型,在专家预测阳性的30人中,20人阳性,10人为阴性,在专家预测阴性的70人中,5人阳性,65人阴性。
- 预测正确 = 阳性样本预测结果为阳,阴性样本预测结果为阴 = T
- 预测错误 = 阳性样本预测结果为阴,阴性样本预测结果为阳 = F
- 正样本数量 = 专家预测阳性的30人 = P
- 负样本数量 = 专家预测阴性的70人 = N
- 正样本中预测结果为正的数量 = 专家预测阳性样本中预测结果为阳的数量 = TP
- 正样本中预测结果为负的数量 = 专家预测阳性样本中预测结果为阴的数量 = FP
- 负样本中预测结果为正的数量 = 专家预测阴性样本中预测结果为阳的数量 = FN
- 负样本中预测结果为负的数量 = 专家预测阴性样本中预测结果为阴的数量 = TN
- 准确率 = accuracy = (TP + TN) / (TP + FP + TN + FN)
- 精准率 = precision = TP / (TP + FP)
- 召回率 = recall = TP / (TP + FN)
- F1 = f1-score (2 * 精准率 * 召回率)/ (精准率 + 召回率)
- support = 预测时的样本容量
- macro avg = 宏平均 = 每个分类的精准率之和 / 分类数
- weighted avg = 加权平均 = ∑(分类的精准率*分类的support/总support)
一般看weighted avg 即可知道该模型预测的准确率
今天的文章从零开始学习机器学习分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/19489.html