2KNN算法用于分类
1KNN算法的基本原理
2分类和回归
如果用算法进行交易,最关心的是模型能否准确预测股票的涨跌。事实上,模型不可能100%准确,这就要求我们评估模型的性能,以找到最可用的模型。为了实现这一目标,我们需要将所掌握的数据集分为培训集和验证集,使用培训集培训模型,并使用验证集来评估模型是否可用。例如,如果有100天股票的价格数据,我们可以将前80天的数据作为培训集,并将接下来20天的数据作为验证集,同时评估培训集和验证集中模型的准确性。如果模型在训练集中得分很高,而验证集中得分很低,则表明模型存在过拟合问题;如果模型在训练集和验证集中得分很低,则表明模型存在欠拟合问题。为了解决这些问题,小瓦需要调整模型参数、补充数据或进行更详细的特征工程
scikit-learn内置了一些玩具数据集供大家学习,有的是分类任务的数据,有的是回归任务的数据。首先,我们使用最简单的鸢尾数据集来演示KNN算法在分类中的应用输入代码如下:
#codeing=utf-8
import matplotlib.pyplot as plt
import seaborn as sns
#导入鸢尾数据和KNN模型
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
if __name__ == "__main__":
iris = load_iris()
print("keys:", iris.keys())
print("feature_names:", iris.feature_names)
print("target:", iris.target)
1载入数据集并查看
3模型性能评估
2拆分数据集
这个数据集的目的是根据样本鸢尾花萼片和花瓣的长度和宽度,结合分类标签来训练模型,这样模型就可以预测鸢尾属于哪个分类
监督学习是指提前标记好的数据。如果数据标记是离散的,并且代表一个类别的标签,并且训练样本使样本获得正确的类别标签,则为分类任务。如果是目标值,培训模型可以预测新样本对应的值——此时模型的目标是连续的,这是一个没有监督学习的回归任务,没有人工主观标记的数据,只有目标和目标的客观特征值,但仍可以通过计算特征值的相关性进行分类,即无监督学习中的聚类任务
1.监督学习和非监督学习
3.评估训练模型的准确性
2机器学习工具的基本使用方法
学习使用python的sklearn库来学习常见的机器学习算法
输出数据如下:可以看出,我们将数据集的特征分配给X,并将分类标签分配给y。通过查看X的形式和第一个数据,共有150个样本,每个样本分为4个特征,训练集中的样本为112个,其余38个样本进入验证集
sepallengthsepalwidthpetallengthpetalwidth
将数据分为训练集和测试集,输入代码如下:
#codeing=utf-8
import matplotlib.pyplot as plt
import seaborn as sns
#导入鸢尾数据和KNN模型
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
#导入数据集拆分工具
from sklearn.model_selection import train_test_split
if __name__ == "__main__":
iris = load_iris()
#print("keys:", iris.keys())
#print("feature_names:", iris.feature_names)
#print("target:", iris.target)
X, y = iris.data, iris.target
print("X shape:", X.shape)
print(X[:1])
#X和y分为训练集和验证集
X_train, X_test, y_train, y_test = train_test_split(X, y)
#检查拆分情况
print("X train:", X_train.shape)
print("X test:", X_test.shape)
1机器学习的基本概念
输出数据如下:请注意,这个数据不是一个稳定值,因为每次分割的训练集和测试集都不一样,所以准确率也不一样,但基本都是90%以上。
分类是实现标记良好的分类标签、培训分类模型,然后将新样本归类为现有的分类过程是给定样本的目标值、培训回归模型、新样本、目标值预测过程,如果是预测未来股票上涨或下跌,则是分类过程,是分类任务;如果是预测未来股票上涨或下跌,这是一个回归过程
输入代码如下:
#创建KNN分类器,默认设置参数
knn_clf = KNeighborsClassifier()
#使用训练集拟合模型
knn_clf.fit(X_train, y_train)
#检查训练集和验证集中模型的准确性
print(”训练集的准确率:%.2f" % knn_clf.score(X_train, y_train))
print()验证集精度:%.2f" % knn_clf.score(X_test, y_test))
输入代码如下:
#codeing=utf-8
import matplotlib.pyplot as plt
import seaborn as sns
#导入鸢尾数据和KNN模型
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
#导入数据集拆分工具
from sklearn.model_selection import train_test_split
# 导入网络搜索
from sklearn.model_selection import GridSearchCV
if __name__ == "__main__":
iris = load_iris()
#print("keys:", iris.keys())
#print("feature_names:", iris.feature_names)
#print("target:", iris.target)
X, y = iris.data, iris.target
#print("X shape:", X.shape)
#print(X[:1])
#X和y分为训练集和验证集
#X_train, X_test, y_train, y_test = train_test_split(X, y)
#检查拆分情况
#print("X train:", X_train.shape)
#print("X test:", X_test.shape)
#创建KNN分类器,默认设置参数
#knn_clf = KNeighborsClassifier()
#使用训练集拟合模型
#knn_clf.fit(X_train, y_train)
#检查训练集和验证集中模型的准确性
#print(”训练集的准确率:%.2f" % knn_clf.score(X_train, y_train))
#print()验证集精度:%.2f" % knn_clf.score(X_test, y_test))
# 从1-10定义n_neighbors
n_neighbors = tuple(range(1, 11)) # [1-11)每个数值,存储元祖(1,2,3,...10)
# 创建网络搜索实例,estimator使用KNN分类器
# 将刚刚定义的n_neighbors传输到param_grid参数
# cv参数指交叉验证次数为5
cv = GridSearchCV(estimator=KNeighborsClassifier(),
param_grid={"n_neighbors": n_neighbors}, cv=5)
# 使用网络搜索拟合数据集
cv.fit(X, y)
# 查看最优参数
print(“最优参数:” cv.best_params_) # {"n_neighbors": 6}
数据集中样本分为三类,分别使用0、用这三个数字来表示
文章为作者独立观点,不代表股票交易接口观点