# sklearn模型的保存与加载
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import joblib
# 一、获得数据
lb = load_boston()
# 二、处理数据
# 1.取得数据集中特征值与目标值
x = lb.data
y = lb.target
# 2.分割数据集 训练集与测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
# 三、进行特征工程
# 1.训练集与测试集标准化处理
# 特征值与目标值都必须进行标准化处理,实例化两个API,分别处理特征值与目标值
# 特征值
std_x = StandardScaler()
x_train = std_x.fit_transform(x_train)
x_test = std_x.transform(x_test)
# 目标值
std_y = StandardScaler()
# 要求传入的y_train是二维数组,后面也一样,用reshape(-1,1)方法转换
y_train = std_y.fit_transform(y_train.reshape(-1, 1))
y_test = std_y.transform(y_test.reshape(-1, 1))
# 1.正规方程求解方式预测结果
lr = LinearRegression()
lr.fit(x_train, y_train)
# 回归系数
print('正规方程的回归系数为:\n', lr.coef_)
# 预测测试集房子的价格,
y_predict = std_y.inverse_transform(lr.predict(x_test))
print('正规方程预测测试集房子的价格:\n', y_predict)
# 回归性能评估
y_test = std_y.inverse_transform(y_test)
print('正规方程的回归性能评估为:', mean_squared_error(y_test, y_predict))
# 保存训练好的模型
joblib.dump(lr, 'test.pkl')
# 模型加载预测房价结果
model = joblib.load('test.pkl')
# 预测测试集房子价格
y_model_predict = std_y.inverse_transform(model.predict(x_test))
print('保存模型预测房价结果\n', y_model_predict)
逻辑回归是解决二分类问题的利器
案例
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta^Tx}} hθ(x)=g(θTx)=1+e−θTx1
其中 sigmoid 函数为:
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1 + e^{-z}} g(z)=1+e−z1
输出: [ 0 , 1 ] [0, 1] [0,1] 区间的概率值,默认 0.5 为阈值。
https://blog.csdn.net/bitcarmanlee/article/details/51165444
与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解
对数似然损失函数cost function:
c o s t ( h 0 ( x ) , y ) = { − l o g ( h θ ( x ) ) if y = 1 − l o g ( 1 − h θ ( x ) ) if y = 0 cost(h_0(x), y) = \begin{cases} −log(h_θ(x)) &\text{if } y=1 \\ −log(1 - h_θ(x)) &\text{if } y=0 \end{cases} cost(h0(x),y)={−log(hθ(x))−log(1−hθ(x))if y=1if y=0
将以上两个表达式合并为一个,则单个样本的损失函数可以描述为:
c o s t ( h θ ( x ) , y ) = − y i l o g ( h θ ( x ) ) − ( 1 − y i ) l o g ( 1 − h θ ( x ) ) cost(h_θ(x),y)=−y_ilog(h_θ(x))−(1−y_i)log(1−h_θ(x)) cost(hθ(x),y)=−yilog(hθ(x))−(1−yi)log(1−hθ(x))
因为 y i y_i yi 只有两种取值情况,1或0,分别令 y = 1 y=1 y=1 或 y = 0 y=0 y=0,即可得到原来的分段表示式。
全体 m m m 个样本的损失函数可以表示为:
c o s t ( h θ ( x ) , y ) = ∑ i = 1 m − y i l o g ( h θ ( x ) ) − ( 1 − y i ) l o g ( 1 − h θ ( x ) ) cost(h_θ(x),y)= \displaystyle\sum_{i=1}^m −y_ilog(h_θ(x))−(1−y_i)log(1−h_θ(x)) cost(hθ(x),y)=i=1∑m−yilog(hθ(x))−(1−yi)log(1−hθ(x))
信息熵越小越好,损失越小,越确定
均方误差:不存在多个局部最低点,只存在一个最小值
对数似然函数:多个局部最小值(这个目前解决不了)—梯度下降法特点
https://www.cnblogs.com/yuyingblogs/p/15310959.html
样本比例:良性(65.5%) 恶性(34.5%)
根据样本数量大小判定,哪个类别少,判定概率值是指这个类型。本案例为恶性(正例),
即概率为0.6则为恶性,概率为0.1则为良性
# 逻辑回归做二分类进行癌症预测
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
# 一、读取数据
# 构造列标签列表
column_names = ['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']
# names参数指定列名
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',
names=column_names)
print(data)
# 二、数据处理
# 1.缺失值进行处理-替代
data = data.replace(to_replace='?', value=np.nan)
# 删除
data = data.dropna()
# 2.取特征值与目标值
y = data[column_names[10]]
x = data[column_names[1:10]]
# 3.数据集分割-训练集与测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
# 三、特征工程
# 1.标准化处理
std = StandardScaler()
# 特征值进行标准化
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
# 四、逻辑回归预测
# 正则化系数C是超参数,可以调优
lg = LogisticRegression(C=1.0)
lg.fit(x_train, y_train)
# 回归系数
print('回归系数:\n', lg.coef_)
# 预测准确率
print('准确率:\n', lg.score(x_test, y_test))
# 每个类别的精确率与召回率
y_predict = lg.predict(x_test)
print('每个类别的精确率与召回率是:\n', classification_report(
# 2与良性对应,4与恶性对应
y_test, y_predict, labels=[2, 4], target_names=['良性', '恶性']))
k-means步骤:
其中,K:把数据划分成多少个类别
若不知道类别个数-超参数
轮廓系数:
解释:
用户对物品种类喜好分析
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
# 读取四张表的数据
prior = pd.read_csv("./data/instacart/order_products__prior.csv")
products = pd.read_csv("./data/instacart/products.csv")
orders = pd.read_csv("./data/instacart/orders.csv")
aisles = pd.read_csv("./data/instacart/aisles.csv")
# 合并四张表到一张表 (用户-物品类别)
_mg = pd.merge(prior, products, on=['product_id', 'product_id'])
print(_mg)
_mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])
print(mt)
# 交叉表(特殊的分组工具)
cross = pd.crosstab(mt['user_id'], mt['aisle'])
# 进行主成分分析
pca = PCA(n_components=0.9)
data = pca.fit_transform(cross)
# 把样本数量减少
x = data[:500]
print(x.shape)
# 假设用户一共分为四个类别
km = KMeans(n_clusters=4)
km.fit(x)
predict = km.predict(x)
print(predict)
# 绘制聚类的结果
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)
plt.xlabel("1")
plt.ylabel("20")
plt.show()
# 评判聚类效果,轮廓系数
print(silhouette_score(x, predict))