vin*_*var 2 python statistics computer-science classification differentiation
这有点难以解释。我有一个整数列表。因此,例如[1, 2, 4, 5, 8, 7, 6, 4, 1]-与元素编号相对应时,-类似于凸图。如何以某种方式从列表中提取此“形状”特征?不必特别精确-只需一般形状,凸形(带有一个驼峰),凹形(带有两个驼峰),直线等即可。
我可以对每种可能的形状使用条件:例如,如果斜率在确定的指数范围内为正,在其后为负,则为斜率,其偏斜度取决于index/list_size。
有一些更聪明的通用方法吗?我想这可能是分类问题-但是没有ML是否可能?
干杯。
numpy.diff
Run Code Online (Sandbox Code Playgroud)
一阶差由out [n] = a [n + 1]-a [n]给出
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.diff.html
import numpy as np
data = [1, 2, 4, 5, 8, 7, 6, 4, 1]
data = np.array(data, dtype=float)
velocity = np.diff(data)
acceleration = np.diff(velocity)
jerk = np.diff(acceleration)
jounce = np.diff(jerk)
print data
print velocity
print acceleration
print jerk
print jounce
>>>
[ 1. 2. 4. 5. 8. 7. 6. 4. 1.]
# positive numbers = rising
[ 1. 2. 1. 3. -1. -1. -2. -3.]
# positive numbers = concave up
[ 1. -1. 2. -4. 0. -1. -1.]
# positive numbers = curling up
[-2. 3. -6. 4. -1. 0.]
# positive numbers = snapping up
[ 5. -9. 10. -5. 1.]
Run Code Online (Sandbox Code Playgroud)
https://zh.wikipedia.org/wiki/速度
https://zh.wikipedia.org/wiki/加速
https://zh.wikipedia.org/wiki/混蛋(物理学)
https://zh.wikipedia.org/wiki/弹跳
我倾向于将一阶导数除以;速度乘以移动平均值并乘以100即可转换为%ROC;有时加速也很重要;凹度...混蛋/跳动越远,数据变得越随机/嘈杂
您还可以计算每个的平均值:
print np.mean(data)
print np.mean(velocity)
print np.mean(acceleration)
Run Code Online (Sandbox Code Playgroud)
对于此样本集,对形状进行概括:
>>>
4.22222222222 # average value
0.0 # generally sideways; no trend
-0.571428571429 # concave mostly down
Run Code Online (Sandbox Code Playgroud)
然后是平均相对标准偏差
import numpy as np
data = [1, 2, 4, 5, 8, 7, 6, 4, 1]
coef_variance = np.std(data) / np.mean(data)
print coef_variance
>>>0.566859453383
Run Code Online (Sandbox Code Playgroud)
我称之为“相当不稳定”;但不是极端的数量级;通常> 1被认为是“高度变异”
https://zh.wikipedia.org/wiki/Coefficient_of_variation
如果我们绘制:
import matplotlib.pyplot as plt
import numpy as np
data = [1, 2, 4, 5, 8, 7, 6, 4, 1]
x = range(9)
plt.plot(x,data,c='red',ms=2)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我们可以看到,这是对所发现内容的总体良好描述:
无整体上升/下降趋势,波动较大,下凹;意思是刚超过4
您还可以polyfit:
import matplotlib.pyplot as plt
import numpy as np
data = [1, 2, 4, 5, 8, 7, 6, 4, 1]
x = range(9)
plt.plot(x,data,c='red',ms=2)
poly = np.polyfit(x,data,2)
z = []
for x in range(9):
z.append(poly[0]*x*x + poly[1]*x + poly[2])
x = range(9)
plt.plot(x,z,c='blue',ms=2)
print poly
plt.show()
Run Code Online (Sandbox Code Playgroud)
返回:
[-0.37445887 3.195671 -0.07272727]
Run Code Online (Sandbox Code Playgroud)
换一种说法:
-0.374x^2 + 3.195x - 0.072
Run Code Online (Sandbox Code Playgroud)
哪些情节:
从那里您可以计算平方和,以查看模型的准确性
您可以迭代polyfit流程,每次提高
np.polyfit(x,data,degree)
Run Code Online (Sandbox Code Playgroud)
直到获得满足需求的足够低的SSD为止;它将告诉您您的数据是否更多x ^ 2ish,x ^ 3ish,x ^ 4ish等。
while ssd > your_desire:
poly_array = polyfit()
ssd = sum_squares(poly_array, data)
degree +=1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |