算法
电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
function pick(list, preStr, res){
var str = list.shift();
for(var i=0; i<str.length; i++){
if(list.length){
pick(list.slice(), preStr + str[i], res);
}else{
res.push(preStr + str[i]);
}
}
}
var letterCombinations = function(digits) {
if(!digits.length){
return []
}
var map = {
2: 'abc',
3: 'def',
4: 'ghi',
5: 'jkl',
6: 'mno',
7: 'pqrs',
8: 'tuv',
9: 'wxyz'
}
var list = [];
var res = [];
for(let i=0; i<digits.length; i++){
list.push(map[digits[i]]);
}
pick(list, '', res);
return res;
};
机器学习
我们在机器学习如果是线性回归,那我们解决问题的方式就是给定一个输入,和一个输出,这么一组数据就成为训练示例,多个数据的集合就成为训练集,x ^ {(i)},y ^ {(i)})(x(i),y(i)),通常这么表示训练集。i 是多少就表示第几组训练示例
通常我们表示 h(x) -> y,为函数,函数 h 被称为假设,通过这个图可以看出,我们通过训练集,学习算法,得到一个假设 h 的函数,输入一个 x 的值,得到一个 y 的预测,就是我们看到的机器训练的过程。
如果我们看到的的函数时一个线性回归函数,一般我们表示函数 h(x) = θ0 + θ1x
成本函数
我们可以使用成本函数来衡量我们的假设函数的准确性。 这需要假设的所有结果与来自x和实际输出y的输入的平均差异(实际上是平均值的更高版本)。
我们在做线性回归的时候,目标就是要把成本函数的值控制到最小。通过不断改变 θ0 和 θ1 的值,得到的最小化的 J(θ0, θ1) 值,最终得到的 h(x) 就是最佳拟合线
梯度下降算法
为了尽快的找到最小化的成本函数,所以我们需要用到一个梯度下降算法,随着我们的特征值增多,成本函数会变成一个三维立体图,这个三维立体图会有高峰和低谷,而低谷就是最小成本函数 θ0 和 θ1。梯度算法就是从某个点位开始,每次增加一定的步长,判断这个步长中最小的值,再往下就行探测,直至探测到比当前值更大,我们就认为这个值是最小化的代价函数。
这里有个问题,步长太大,就会导致最终的值还不是最小成本函数,步长太小,计算量就会增大,所以这里也是一个需要均衡的地方。
###