(笔记sklearn入门 3.3 逻辑回归、聚类

逻辑回归是解决二分类问题的利器:

广告点击率

判断用户的性别

预测用户是否会购买给定的商品类

判断一条评论是正面的还是负面的

image

image

逻辑回归公式:

image

image

image

良/恶性乳腺癌肿瘤预测

API:sklearn.linear_model.LogisticRegression

image

import pandas as pd
import numpy as np

# col_name 为列名
col_name = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']

f = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",names=col_name)

f.replace(to_replace='?',value=np.nan,inplace=True)
f.dropna(inplace=True)

# 进行数据分割
from sklearn.model_selection import train_test_split
x_train,  x_test,y_train, y_test = train_test_split(f[col_name[1:10]],f[col_name[10]],test_size=.25)

# 标准化
from sklearn.preprocessing import StandardScaler
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)

# 逻辑回归预测
from sklearn.linear_model import LogisticRegression
lg = LogisticRegression(C=1.0)
lg.fit(x_train,y_train)
lg.coef_

print("精确率",lg.score(x_test,y_test))

from sklearn.metrics import classification_report,mean_squared_error
print(classification_report(y_test,lg.predict(x_test),labels=[2,4],target_names=['良性','恶性']))

image

聚类

image

非监督学习(unsupervised learning)主要方法:k-means

image

步骤:

1、随机设置K个特征空间内的点作为初始的聚类中心

2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类
中心点作为标记类别

3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平
均值)

4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行
第二步过程

from sklearn.decomposition import PCA
import numpy as np
import pandas as pd
'''
    prior = pd.read_csv(r"D:\Python\机器学习代码和资料\instacart-market-basket-analysis\order_products__prior.csv")
    products = pd.read_csv(r"D:\Python\机器学习代码和资料\instacart-market-basket-analysis\products.csv")
    orders = pd.read_csv(r"D:\Python\机器学习代码和资料\instacart-market-basket-analysis\orders.csv")
    aisles = pd.read_csv(r"D:\Python\机器学习代码和资料\instacart-market-basket-analysis\aisles.csv")

    # 合并四张表到一张表
    _mg = pd.merge(pd.merge(prior,products,on=['product_id', 'product_id']),orders,on=['order_id','order_id'])
    mt = pd.merge(_mg,aisles,on=['aisle_id','aisle_id'])
    # mt.to_csv(r"D:\Python\机器学习代码和资料\instacart-market-basket-analysis\mt.csv")
'''
mt = pd.read_csv(r"D:\Python\机器学习代码和资料\instacart-market-basket-analysis\mt.csv")
cross = pd.crosstab(mt['user_id'], mt['aisle']) # 用户id(行)和所购商品所属具体物品类别(列)


# 进行主成分分析
pca = PCA(n_components=0.9)
data = pca.fit_transform(cross)

# 进行聚类

from sklearn.cluster import KMeans

# 取样本切片,减少数量
x = data[:500]

# 假设用户一共分为四个类别
km = KMeans(n_clusters=4)
km.fit(x)
predict = km.predict(x)

# 显示聚类的结果
from matplotlib import pyplot as plt
plt.figure(figsize=(10,10))
# 建立四个颜色的列表
colored = ['orange','green','blue','purple']
colr = [colored[i] for i in predict]
plt.scatter(x[:,1],x[:,20],color=colr) # 取x的第1列()和20列

# 评判聚类效果,轮廓系数
from sklearn.metrics import silhouette_score
silhouette_score(x,predict)

image

image

如果sc_i 小于0,说明a_i 的平均距离大于最近的其他簇。
聚类效果不好

如果sc_i 越大,说明a_i 的平均距离小于最近的其他簇。
聚类效果好

轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优

image

posted @ 2021-09-28 23:49  Lecoww  阅读(133)  评论(0)    收藏  举报