浅谈tsfresh(附demo)

简介:

tsfresh是开源的提取时序数据特征的python包,能够提取出超过4000种特征,堪称提取时序特征的瑞士军刀。最近有所需求才开始研究tsfresh,目前除了官方的英文文档以外几乎没有中文的博客对此有详细的介绍。本文将介绍一个关于时间序列分类的demo,帮助大家尽快的学习tsfresh。

特别提示:python版本小于2.7

特征类别:

https://blog.csdn.net/xindoo/article/details/79177378,大家有兴趣可以看看这个博客,虽然介绍的很好但是都是比较重要的特征提取。

DEMO:

# -*- coding: utf-8 -*-
from tsfresh.examples.robot_execution_failures import download_robot_execution_failures,load_robot_execution_failures
import matplotlib.pylab as plt
import seaborn as sns
from tsfresh import extract_features, extract_relevant_features, select_features
from tsfresh.utilities.dataframe_functions import impute
from tsfresh.feature_extraction.settings import ComprehensiveFCParameters
from sklearn.tree import DecisionTreeClassifier
from sklearn.cross_validation import train_test_split
from sklearn.metrics import classification_report

download_robot_execution_failures()
df, y = load_robot_execution_failures()

print(df.head())

df[df.id == 3][['time', 'F_x' ,'F_y',  'F_z',  'T_x',  'T_y',  'T_z']].plot(x='time',title='Success example(id 3)', figsize=(12, 6))
df[df.id == 20][['time', 'F_x' ,'F_y',  'F_z',  'T_x',  'T_y', 'T_z']].plot(x='time',title='Failure example(id 20)', figsize=(12, 6))
plt.show()

#特征提取
extract_settings = ComprehensiveFCParameters()
#以id聚合
X = extract_features(df, column_id='id', column_sort='time', default_fc_parameters=extract_settings, impute_function=impute)
#print(X.head())

#提取最相关特征 三个步骤
X_filtered = extract_relevant_features(df, y,column_id='id', column_sort='time', default_fc_parameters=extract_settings)
X_filtered.info()
X_train, X_test, X_filtered_train, X_filtered_test, y_train, y_test = train_test_split(X, X_filtered, y, test_size=4)

cl =DecisionTreeClassifier()
cl.fit(X_train, y_train)

print(classification_report(y_test, cl.predict(X_test)))

cl.n_features_

cl2 = DecisionTreeClassifier()
cl2.fit(X_filtered_train, y_train)
print(classification_report(y_test, cl2.predict(X_filtered_test)))

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
深拷贝和浅拷贝都是复制一个对象,区别在于复制后的对象与原对象是否共享同一内存地址。深拷贝会复制出一个新的对象,与原对象不共享内存地址,而浅拷贝只是复制了一个指向原对象的引用,两个对象共享同一内存地址。 以下是深拷贝和浅拷贝的示例代码: ```javascript // 浅拷贝示例 let obj1 = { name: 'Alice', age: 20, skills: ['JavaScript', 'Vue', 'React'] } let obj2 = Object.assign({}, obj1) // 使用 Object.assign() 方法进行浅拷贝 obj2.age = 21 // 修改 obj2 的 age 属性 obj2.skills.push('Angular') // 修改 obj2 的 skills 属性 console.log(obj1) // { name: 'Alice', age: 20, skills: [ 'JavaScript', 'Vue', 'React', 'Angular' ] } console.log(obj2) // { name: 'Alice', age: 21, skills: [ 'JavaScript', 'Vue', 'React', 'Angular' ] } // 可以看到,修改了 obj2 的属性后,obj1 的 skills 属性也被修改了,这是因为浅拷贝只是复制了一个指向原对象的引用,两个对象共享同一内存地址。 // 深拷贝示例 let obj3 = { name: 'Alice', age: 20, skills: ['JavaScript', 'Vue', 'React'] } let obj4 = JSON.parse(JSON.stringify(obj3)) // 使用 JSON.parse() 和 JSON.stringify() 方法进行深拷贝 obj4.age = 21 // 修改 obj4 的 age 属性 obj4.skills.push('Angular') // 修改 obj4 的 skills 属性 console.log(obj3) // { name: 'Alice', age: 20, skills: [ 'JavaScript', 'Vue', 'React' ] } console.log(obj4) // { name: 'Alice', age: 21, skills: [ 'JavaScript', 'Vue', 'React', 'Angular' ] } // 可以看到,修改了 obj4 的属性后,obj3 的属性没有被修改,这是因为深拷贝会复制出一个新的对象,与原对象不共享内存地址。 ``` 需要注意的是,深拷贝虽然可以解决浅拷贝的问题,但是由于深拷贝会递归地复制对象的所有属性,所以可能会导致性能问题,特别是在处理大型复杂对象时。因此,需要根据具体情况选择合适的拷贝方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值