91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

利用梯度下降算法,進行機器學習.利用C++實現下降算法.

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
using?namespace?std;

//Term存放每條數據flag為True表示1false表示-1
struct?Term
{
bool?flag;
map?pairs;
double?score;
};

//損失函數
int?lostFunction(Term[]?int?map);
//進行梯度下降的迭代過程
void?doGradient(int?T?int?sampleNum?Term[]);
//得到梯度的值
void?changeGradient(Term[]?int?map*);
//給每條數據打分如果分數大于0那么認為是+1的;小于0認為是-1的
double?getScore(Term?map*);
void?testTestData(map);
void?inputData(char*?int?Term[]);
void?getTerm(string?Term*);
void?getKeyValue(string?int*?double*);

map?weight;

int?main()
{
Term?trainData[2000];
cout?< inputData(“train.dat“?2000?trainData);

cout?< for?(int?i=1;?i<10000;?i++)
weight[i]?=?1.0;

cout?< doGradient(25?2000?trainData);

cout?< testTestData(weight);
//從結果看有overfitting的存在
//該梯度算法實現中沒有加入Regularization一項

return?0;
}

void?inputData(char*?file?int?n?Term?terms[])
{
ifstream?infile;
string?s;
Term?term;
char?cs[7000];
infile.open(file);
for?(int?i=0;?i {
infile.getline(cs?7000);
if?(cs[0]?==?‘#‘)
{
i--;
continue;
}
s?=?cs;
terms[i].pairs.clear();
getTerm(s?&terms[i]);
}
infile.close();
}

void?doGradient(int?T?int?sampleNum?Term?terms[])
{
map?gradient;
map?tempWeight;
int?error?=?0;
bool?goOn?=?false;

error?=?lostFunction(terms?sampleNum?weight);
for?(int?t=0;?t {
//求得梯度
gradient.clear();
changeGradient(terms?sampleNum?&gradient);

goOn?=?false;
double?alpha?=?4.5;
//不斷變小步長直到小于.000001為止求得合理的步長
while?(alpha?>?0.0000001)
{
map::iterator?it?=?weight.begin();
for?(;?it!=weight.end();?it++)
tempWeight[it->first]?=?it->second?+?alpha?*?gradient[it->first];
int?error1?=?lostFunction(terms?sampleNum?tempWeight);
if?(error1? {
cout?< cout?< cout?< weight?=?tempWeight;
error?=?error1;
goOn?=?true;
break;
}
alpha?/=?2.0;
}
if?(!goOn)
break;
cout?< }
}

int?lostFunction(Term?terms[]?int?sampleNum?map?w)
{
int?wrong?=?0;
for?(int?i=0;?i {
terms[i].score?=?getScore(terms[i]?&w);
if?(terms[i].flag?&&?terms[i].score<0)
{
wrong++;
}
else?if?(terms[i].flag==false?&&?terms[i].score>0)
{
wrong++;
}
}
return?wrong;
}

void?changeGradient(Term?terms[]?int?sampleNum?map*?g)
{
for?(int?i=0;?i {
map::iterator?it?=?terms[i].pairs.begin();
for?(;?it!=terms[i].pairs.end();?it++)
{
//根據梯度下降的公式應該是(*g)[it->first]+=it-second
//由于it->second都是值比較小的數導致梯度下降不明顯
//所以這里使用?+=和-=?

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????4671??2011-06-16?16:39??機器學習_梯度下降算法實現\gradient.cpp

?????文件?????536475??1997-11-17?18:11??機器學習_梯度下降算法實現\test.dat

?????文件????2154343??1997-11-17?18:12??機器學習_梯度下降算法實現\train.dat

?????文件???????1869??2011-06-16?17:22??機器學習_梯度下降算法實現\實驗報告.txt

?????目錄??????????0??2011-06-16?17:22??機器學習_梯度下降算法實現

-----------?---------??----------?-----??----

??????????????2697358????????????????????5


評論

共有 條評論