机器学习之有监督学习:分类

前置准备

详情请见我的上一篇博客

基本分类模型

K近邻分类器(KNN)

在这里插入图片描述

  • 主要参数:
    在这里插入图片描述
    在这里插入图片描述
  • 使用方法:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

决策树

在这里插入图片描述

  • 主要参数:
    在这里插入图片描述
  • 使用方法:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

朴素贝叶斯

在这里插入图片描述

  • 主要参数:
    在这里插入图片描述
  • 使用方法:
    在这里插入图片描述
    在这里插入图片描述

人体运动状态信息评级

实现机理

注:程序所需数据文件点此下载(提取码:BigG)
在这里插入图片描述

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源代码

#人体运动状态信息评级.py
import numpy as np
import pandas as pd
import time

from sklearn.impute import SimpleImputer as Imputer #预处理模块
from sklearn.model_selection import train_test_split #自动生成训练集和测试集模块
from sklearn.metrics import classification_report #预测结果评估模块

from sklearn.neighbors import KNeighborsClassifier #K近邻分类器
from sklearn.tree import DecisionTreeClassifier #决策树分类器
from sklearn.naive_bayes import GaussianNB #高斯朴素贝叶斯函数

def load_dataset(feature_paths, label_paths): #读取特征文件列表和标签文件列表的内容,归并后返回
    feature = np.ndarray(shape=(0, 41)) #列数量和特征维度为41
    label = np.ndarray(shape=(0, 1)) #列数量和标签维度为1
    for file in feature_paths:
        df = pd.read_table(file, delimiter=',', na_values='?', header=None) #使用逗号为分隔符读取特征数据,将问号替换标记为缺失值,文件内不含表头
        imp = Imputer(missing_values=np.nan, strategy="mean") #使用平均值补全缺失值,然后将数据进行补全
        imp.fit(df) #训练预处理器
        df = imp.transform(df) #生成预处理结果
        feature = np.concatenate((feature, df)) #将新的数据合并到特征集合中
    for file in label_paths:
        df = pd.read_table(file, header=None) #读取标签数据,文件中不包含表头
        label = np.concatenate((label, df)) #将新读入的数据合并到标签集合中
    label = np.ravel(label) #标签规整为一维向量
    return feature, label

def main():
    feature_paths = ['人体运动状态信息评级数据/A.feature', 
                     '人体运动状态信息评级数据/B.feature', 
                     '人体运动状态信息评级数据/C.feature', 
                     '人体运动状态信息评级数据/D.feature', 
                     '人体运动状态信息评级数据/E.feature'] #特征文件路径
    label_paths = ['人体运动状态信息评级数据/A.label', 
                   '人体运动状态信息评级数据/B.label', 
                   '人体运动状态信息评级数据/C.label', 
                   '人体运动状态信息评级数据/D.label', 
                   '人体运动状态信息评级数据/E.label'] #标签文件路径
    X_train, y_train = load_dataset(feature_paths[:4], label_paths[:4]) #前四个数据作为训练集
    x_test, y_test = load_dataset(feature_paths[4:], label_paths[4:]) #最后一个数据作为测试集
    X_train, x_, y_train, y_ = train_test_split(X_train, y_train, test_size=0.1) #使用全量数据作为训练集,split函数打乱训练集

    knn_start = time.perf_counter()
    #创建K近邻分类器,并在测试集上进行预测
    print("Start training knn")
    knn = KNeighborsClassifier().fit(X_train, y_train)
    print("Training done!")
    answer_knn = knn.predict(x_test) #得到分类结果
    print("Prediction done!")
    print("knn 用时:{:.2f}".format(time.perf_counter() - knn_start))

    dt_start = time.perf_counter()
    #创建决策树分类器,并在测试集上进行预测
    print("Start training DT")
    dt = DecisionTreeClassifier().fit(X_train, y_train)
    print("Training done!")
    answer_dt = dt.predict(x_test) #得到分类结果
    print("Prediction done!")
    print("dt 用时:{:.2f}".format(time.perf_counter() - dt_start))

    gnb_start = time.perf_counter()
    #创建贝叶斯分类器,并在测试集上进行预测
    print("Start training Bayes")
    gnb = GaussianNB().fit(X_train, y_train)
    print("Training done!")
    answer_gnb = gnb.predict(x_test) #得到分类结果
    print("Prediction done!")
    print("gnb 用时:{:.2f}".format(time.perf_counter() - gnb_start))
    
    #计算准确率和召回率
    print("\n\nThe classification report for knn:")
    print(classification_report(y_test, answer_knn))

    print("\n\nThe classification report for dt:")
    print(classification_report(y_test, answer_dt))

    print("\n\nThe classification report for gnb:")
    print(classification_report(y_test, answer_gnb))

main()

上证指数涨跌预测

实现机理

注:程序所需数据文件点此下载(提取码:BigG)
根据网易财经上获得的上证指数的历史数据,爬取的20年的上证指数数据,给出当前时间前150天的历史数据,预测当天上证指数的涨跌。

效果图

在这里插入图片描述

源代码

#上证指数涨跌预测.py
import pandas as pd
import numpy as np
from sklearn import svm
from sklearn import model_selection

data = pd.read_csv('上证指数涨跌预测数据.csv', encoding='gbk', parse_dates=[0], index_col=0)
data.sort_index(0, ascending=True, inplace=True)

dayfeature = 150 #选取150天数据
featurenum = 5 * dayfeature #选取的5个特征*天数
x = np.zeros((data.shape[0] - dayfeature, featurenum + 1)) #记录150天的5个特征值
y = np.zeros((data.shape[0] - dayfeature)) #记录涨或者跌

for i in range(0, data.shape[0] - dayfeature):
    x[i, 0:featurenum] = np.array(data[i:i + dayfeature][[u'收盘价', u'最高价', u'最低价', u'开盘价', u'成交量']]).reshape((1, featurenum)) #将数据中的四种存入数组中
    x[i, featurenum] = data.iloc[i + dayfeature][u'开盘价'] #最后一列记录当日开盘价

for i in range(0, data.shape[0] - dayfeature):
    if data.iloc[i + dayfeature][u'收盘价'] >= data.iloc[i + dayfeature][u'开盘价']:
        y[i] = 1 #涨
    else:
        y[i] = 0 #跌

clf = svm.SVC(kernel='rbf') #调用svm函数,设置kernel参数,默认为rbf
result = []

for i in range(5):
    x_train, x_test, y_train, y_test = model_selection.train_test_split(x, y, test_size=0.2) #x和y的验证集和测试集,切分80-20%的测试集
    clf.fit(x_train, y_train) #训练数据进行训练
    result.append(np.mean(y_test == clf.predict(x_test))) #将预测数据和测试集的验证数据进行比对

print("svm classifier accuacy:")
print(result)

注:本文是博主机器学习课程的心得总结,不支持任何商用且不支持转载!如果你也对机器学习有一定的兴趣和理解,欢迎随时找博主交流~

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值