Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kneighbors在没有洗牌的情况下获得不同的分数_Python_Scikit Learn - Fatal编程技术网

Python Kneighbors在没有洗牌的情况下获得不同的分数

Python Kneighbors在没有洗牌的情况下获得不同的分数,python,scikit-learn,Python,Scikit Learn,我有一个具有155个特征的数据集。40143份样品。它按日期排序(从最早到最新),然后我从数据集中删除了日期列 标签位于第一列 CV结果约%65(分数的平均准确度+/-0.01),代码如下: def cross(dataset): dropz = ["result"] X = dataset.drop(dropz, axis=1) X = preprocessing.normalize(X) y = dataset["result"]

我有一个具有155个特征的数据集。40143份样品。它按日期排序(从最早到最新),然后我从数据集中删除了日期列

标签位于第一列

CV结果约%65(分数的平均准确度+/-0.01),代码如下:

def cross(dataset):


     dropz  = ["result"] 

     X = dataset.drop(dropz, axis=1)
     X = preprocessing.normalize(X)

     y = dataset["result"]


     clf = KNeighborsClassifier(n_neighbors=1, weights='distance', n_jobs=-1)

     scores = cross_val_score(clf, X, y, cv=10, scoring='accuracy')
def train(dataset):
    dropz  = ["result"] 
    X = dataset.drop(dropz, axis=1)
    X = preprocessing.normalize(X)
    y = dataset["result"]

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1000, random_state=42)

    clf = KNeighborsClassifier(n_neighbors=1, weights='distance', n_jobs=-1).fit(X_train, y_train)
    clf.score(X_test, y_test)
我还获得了与以下代码类似的精度:

def cross(dataset):


     dropz  = ["result"] 

     X = dataset.drop(dropz, axis=1)
     X = preprocessing.normalize(X)

     y = dataset["result"]


     clf = KNeighborsClassifier(n_neighbors=1, weights='distance', n_jobs=-1)

     scores = cross_val_score(clf, X, y, cv=10, scoring='accuracy')
def train(dataset):
    dropz  = ["result"] 
    X = dataset.drop(dropz, axis=1)
    X = preprocessing.normalize(X)
    y = dataset["result"]

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1000, random_state=42)

    clf = KNeighborsClassifier(n_neighbors=1, weights='distance', n_jobs=-1).fit(X_train, y_train)
    clf.score(X_test, y_test)
但是如果我在下面的代码中不使用shuffle,结果是c.%49 如果我使用shuffle,则结果为c.%六十五

我应该提到的是,我从一开始到另一开始,每连续尝试1000次,结果都是一样的

dataset = pd.read_csv("./dataset.csv", header=0,sep=";")

dataset = shuffle(dataset) #!!!???

X_train = dataset.iloc[:-1000,1:]
X_train = preprocessing.normalize(X_train)
y_train = dataset.iloc[:-1000,0]


X_test = dataset.iloc[-1000:,1:]
X_test = preprocessing.normalize(X_test)
y_test = dataset.iloc[-1000:,0]

clf = KNeighborsClassifier(n_neighbors=1, weights='distance', n_jobs=-1).fit(X_train, y_train)
clf.score(X_test, y_test)
假设您的问题是“为什么会发生这种情况”:

在第一个和第二个代码段中,都发生了底层的无序化(在交叉验证和train_test_split方法中),因此它们(在分数和算法上)与上一个代码段中的无序化“on”是等价的

由于原始数据集是按日期排序的,因此可能(通常很可能)有一些数据会随时间而变化,这意味着由于分类器从未看到最近1000个时间点的数据,因此它不知道基础分布中的变化,因此无法对其进行分类


回复评论中进一步数据的附录:

这表明,可能存在一些在较小时间范围内捕获的指示性过程。有两种有趣的方法可以探索它:

  • 减小测试集的大小,直到找到一个窗口大小,在该窗口大小中,随机/不随机之间的差异可以忽略不计
  • 这个过程本质上表现为功能之间的某种依赖性,因此您可以看到在一个小的时间范围内,功能之间是否存在依赖性

  • 嗨,谢谢。是的,我想知道为什么会这样。抱歉搞混了。是的,CV和训练测试都有洗牌。我尝试其他1000分,结果是一样的。我的意思是我得到了30.000-30.999,或20.000-20.999,或另外1000个绝对连续的样本作为测试数据集。