机器学习是根据大量现有的数据,找出一个基本拟合的函数(模型),并根据该函数对新数据进行预测、决策、分类等技术。
比如,现有数据:
身高 | 体重 |
---|---|
160 | 120 |
170 | 130 |
180 | 140 |
假设身高=x,体重=y,最拟合的函数是 y = 1 * x + 40
那么根据函数,我们预测身高=190的人,体重=150
以上例子是理想的情况,实际我们接触的数据远比它大,维度(列)也多,不能轻易地给出一个完全拟合的函数,但是我们仍然有办法找到该函数,这个过程就是机器学习的过程。
鸢尾花数据集(部分),共计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人阴性。
一般看weighted avg 即可知道该模型预测的准确率