0
plt.plot
をソートする必要がありますが、ソートする必要がある散布図(plt.scatter
)は奇妙なようです。このスクリプトでこの問題が発生しました。スクリプト自体は重要ではなく、最小限の作業例としてのみ機能します。重要なのはscatter
の動作です。つまり、plt.scatter(sorted(l2), Y)
は、plt.scatter(l2, Y)
とは異なる結果になります。何故ですか?私には分かりません。ソートされた散布図はソートされていないものとは異なります
import matplotlib.pyplot as plt
import numpy as np
from math import log, exp, isnan
from sys import argv
from random import randint
def generate_linear_regression_line(X, Y):
X_ = np.mean(X)
XX_ = np.mean(map(lambda x:x*x,X))
Y_ = np.mean(Y)
XY_ = map(lambda x,y:x*y,X,Y)
m = np.mean((X_ * Y_ - XY_)/(X_**2 - XX_))
b = Y_ - m * X_
print m
print b
return lambda x : m * x + b
max = int(argv[1])
l1 = [randint(1, max) for i in range(max)]
# l2 = range(0,max)
l2 = []
maxentry = 0
while len(l2) != max:
n = randint(max, 2*max)
if n not in l2:
if n > maxentry:
maxentry = n
l2.append(n)
assert(maxentry >= len(l1))
assert(len(l2) == len(l1))
regl = generate_linear_regression_line(l2, l1)
X = []
Y = []
for i in range(len(l2)):
X.append(i)
Y.append(regl(i))
print sum(l1)
print sum(Y)
assert(len(Y) == len(l1))
# assert(sum(Y) > sum(l1))
plt.scatter(l2, l1)
plt.plot(X, Y, c='red')
plt.scatter(sorted(l2), Y, c='green')
plt.xlabel('L2')
plt.ylabel('L1')
plt.show()