前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >当数据只有一个特征……

当数据只有一个特征……

作者头像
不可言诉的深渊
发布2020-02-17 15:44:55
9012
发布2020-02-17 15:44:55
举报

在学习机器学习的时候,各种数据集也都玩遍了,我们都接触的是有 2 个特征或者更多个特征的数据集,这次来一点不一样的,只有一个特征的数据集!

检查版本

首先需要检查 scikit-learn 版本,因为今天的问题老版本可能不会有,当然我的版本有这个问题。给大家看一下我的 scikit-learn 版本,如图所示。

先模仿一下

我首先模仿之前学习机器学习的代码格式,如下所示:

代码语言:javascript
复制
from pandas import DataFrame
from random import random, choice
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
df = DataFrame({'X0': [random()for _ in range(100)], 'y': [choice((0, 1))for _ in range(100)]})
X, y = df['X0'], df['y']
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
knn = KNeighborsClassifier().fit(X_train, y_train)
print(knn.score(X_test, y_test))

这个例子很简单,数据集中共有 100 条数据就一个特征 X0,y 表示类别,有 0 和 1 两个类别,接下来运行一下看看行不行,如图所示。

稍微翻译一下:期望接收到一个二维数组,但是传进去的却是一个一维数组,这种情况怎么办呢?很简单~!把它转换成二维数组不就完事了吗?

转二维数组

转二维数组的逻辑非常简单,把 X, y = df['X0'], df['y'] 这一行改成 X, y = [df['X0']], df['y'] 就行了,转换之后再运行一下看看,如图所示。

还是报错,稍微翻译一下:发现输入变量和样本数量不一致,哈?!这个是什么鬼?!这是因为特征的行数与类别的行数不相等,我们先打印一下 X 的形状看看,如图所示。

1 行 100 列,好了,解决方案已经很明显了,把 X 做一个转置就行了。代码如下:

代码语言:javascript
复制
from pandas import DataFrame
from random import random, choice
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from numpy import array
df = DataFrame({'X0': [random()for _ in range(100)], 'y': [choice((0, 1))for _ in range(100)]})
X, y = array([df['X0']]).T, df['y']
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
knn = KNeighborsClassifier().fit(X_train, y_train)
print(knn.score(X_test, y_test))

运行结果如图所示。

只要看到没有报错就行了,打印出来的评估分数看看就好,毕竟我为了讲解而生成的数据是随机和没有实际意义的数据

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python机器学习算法说书人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档