<jupyter_start><jupyter_text>Read the data.<jupyter_code>df = pd.read_csv('data/ads.csv')
df.head()<jupyter_output><empty_output><jupyter_text>Label encoding to convert the data.<jupyter_code>le = LabelEncoder()

df['Time'] = le.fit_transform(df['Time'])

X = df.values
X[:5]<jupyter_output><empty_output><jupyter_text>Initializing *K-Means* with count of clusters equals to 2.<jupyter_code>kmeans = KMeans(2)
labels = kmeans.fit_predict(X)<jupyter_output><empty_output><jupyter_text>Plot the original data.<jupyter_code>plt.title(kmeans)
plt.scatter(X[:, 0], X[:, 1], c=labels, s=25)
arr1, arr2 = [], []

for i, x in enumerate(labels):
    if x == 1:
        arr1.append(X[i])
    else:
        arr2.append(X[i])
arr1, arr2 = np.array([list(x) for x in arr1]), np.array([list(x) for x in arr2])
df=pd.DataFrame({'x':X[:, 0].tolist(),'y':X[:, 1].tolist()})
#print(df)
df.plot(x='x',y='y', kind='scatter')
plt.show()
#датафреймы каждого из двух классов
arr1X = arr1[:, 0].tolist()
arr1Y = arr1[:, 1].tolist()
arr2X = arr2[:, 0].tolist()
arr2Y = arr2[:, 1].tolist()

df1=pd.DataFrame({'x': arr1X,'y': arr1Y})
df2=pd.DataFrame({'x': arr2X,'y': arr2Y})

#вычисляем ковариационную матрицу
A=df.cov()
#вычисляем обратную к ковариационной
B=np.linalg.inv(A)
print(A)
print(B)
#проверка обратной матрицы
print(A.dot(B))
#вычисление векторов средних для каждого класса
mean_1=df1.mean()
mean_2=df2.mean()
print(mean_1)
print(mean_2)
#вектор разности средних
m=mean_1-mean_2
print(m)
#коэффициенты функции Фишера
a=B.dot(m)
print(a)
#Функция Фишера: z=-0.000093859x- 0.000065494y
#вычисляем значения функции Фишера в центрах классов
e1=a.dot(mean_1)
e2=a.dot(mean_2)
print(e1)
print(e2)
#вычисляем порог а_0
a_0=(e1+e2)/2
print(a_0)
#проверка на обучающей выборке: 
#сравниваем значения функции Фишера на объектах с порогом
#ошибок нет, в 1 и 3 точках значение меньше порога, в остальных - больше
print(a.dot(df.iloc[0]))
print(a.dot(df.iloc[1]))
print(a.dot(df.iloc[2]))
print(a.dot(df.iloc[3]))
print(a.dot(df.iloc[4]))
#визуализация: прямая z=0.000093859x+ 0.000065494y = 8.060015422478337, т.е. y=123064-1.43*x
#рисую изначальные точки
df.plot(x='x',y='y', kind='scatter')
#генерирую натуральные числа от 1 до 5
x1 = [i for i in range(1,220)]
#генерирую значения y=0.4x+2.1 в х от 1 до 5
y1 = [123064-1.43*i for i in x1]
#рисую прямую
plt.plot(x1,y1)
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.17735849056603772, 'fraction_numerical': 0.06457023060796646, 'mean_word_length': 6.059171597633136, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '407115', 'license': 'MIT', 'n_tokens_mistral': 1204, 'n_tokens_neox': 1213, 'n_words': 220, 'path': 'fisher.ipynb', 'repo_name': 'masich/big-data', 'size': '2385'}