每日记录,2022年1月7日
1. 在牛客上刷题总结
- Lambda表达式
语法: lambda 参数列表: Lambda体
注意:python中Lambda体只能是一条语句,计算结果返回给Lambda表达式。
下面以一段代码为例:
def calculate_fun(opr):
if opr == '+':
return lambda a, b: a + b
else:
return lambda a, b: a - b
f1 = calculate_fun('+')
f2 = calculate_fun('-')
print(f1)
print(f1(10, 5))
print(f2(10, 5))
运行结果为:
- 三大基础函数
1.过滤操作filter( ):对迭代对象的元素进行过滤。
[语法]: filter(function, iterable)
下面以一段代码为例:
users = ['Tony', 'Tom', 'Jerry', 'dog']
users_filter = filter(lambda u: u.startswith('T'), users)
print(users_filter)
print(list(users_filter))
运行结果为:<filter object at 0x000001DE14603EB0>, [‘Tony’, ‘Tom’]
注意:此处是过滤保留满足函数条件的对象。
2.映射操作map( ):迭代对象的元素逐一传入函数中,在函数中实现变换。
[语法]: map(function, iterable)
下面以一段代码为例:
users = ['Tony', 'Tom', 'Jerry', 'dog']
users_map = map(lambda u: u.lower(), users)
print(list(users_map))
运行结果为:[‘tony’, ‘tom’, ‘jerry’, ‘dog’]
3.聚合操作reduce( ):将多个数据聚合起来输出单个数据。
[语法]: reduce(function, iterable[, initializer]) 其中initializer为初始值。
下面以一段代码为例:
from functools import reduce
a = (1, 2, 3, 4)
a_reduce = reduce(lambda acc, i: acc + i, a)
print(a_reduce)
a_reduce = reduce(lambda acc, i: acc + i, a, 2)
print(a_reduce)
运行结果为:10, 12.
2. 学习机器学习课程总结
学习了一些关于多项式回归以及模型泛化的知识点。下面简要的总结梳理一下。
- 多项式回归
相比与线性回归,多项式回归主要是用于解决非线性回归问题。首先在原有特征变量的基础上,一次增加高阶的变量(比如: x 2 x^2 x2、 x 3 x^3 x3等)。然后,采用线性回归的方式确定各个特征变量的参数,进而实现对非线性映射关系的拟合。
优点:可以更好的拟合非线性映射关系
缺点:随着模型复杂程度的增加模型训练会产生过拟合现象。
【关于python中sci-kit learn中的实现】:通常采用Pipeline的方式实现。下面展示下相应的代码:
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import mean_squared_error
# 生成虚拟数据用于测试
x = np.random.uniform(-3, 3, size=100)
X = x.reshape(-1, 1)
y = 0.8 * X**2 + 3 * X + 2 + np.random.normal(0, 1, 100)
# 实例化管道
poly_reg = Pipeline([
("poly", PolynomialFeatures(degree=2)),
("std_scaler", StandardScaler()),
("lin_reg", LinearRegression())
])
# 利用管道拟合
poly_reg.fit(X, y)
y_predict = poly_reg.predict(X)
print(mean_squared_error(y, y_predict))
运行结果为:1.4013375864086192e-29
- 过拟合与欠拟合
过拟合和欠拟合分别对应训练模型的两种状态。过拟合是指模型对训练样本的拟合很好,但模型的复杂程度很高,从而导致模型的测试误差很大。欠拟合是指模型训练误差很大,模型没法很好的拟合训练样本。 - 验证数据集与交叉验证
验证数据集是随机从训练数据集中取出的一部分数据,用于调节模型参数,从而里面模型过拟合。交叉验证则是平均将训练集分成若干份,每次取一份作为验证数据集,其余作为训练数据集验证模型参数。优点:更加合理的确定参数,有效的解决随机性带来的问题。缺点是耗时。 - 偏差与方差的平衡
偏差是可能是模型欠拟合等因素导致的一种误差,方差则是可能由于模型过拟合导致的误差。如何协调偏差方差是机器学习的一个重点任务。