CHICAGO -- The tradition of throwing back an opposing hitter's home run ball at Wrigley Field worked out well for Ivan Rodriguez.
"I was telling my father last night I would love to hit it here because I know the fans are going to throw it," said Rodriguez, who got his wish when a fan tossed his keepsake back into the field.
Houston starter Brian Moehler (1-0) pitched five innings to get his first victory since Sept. 10, 2008, against Pittsburgh.
Chris Sampson pitched 1 2/3 innings for his first career save despite giving up a solo shot to Alfonso Soriano and an RBI single to Milton Bradley. He ended the game by getting Geovany Soto to line out to third with runners on first and second.
"We seem to make most ninth innings exciting, but a win's a win," Astros manager Cecil Cooper said.
Derrek Lee was 4 for 5 with a home run for the Cubs who had their season-high winning streak snapped. The Cubs finished the homestand with a 4-1 record.
"It was a great homestand. I think we were getting a little greedy when we wanted the one today," Lee said.
After not allowing a hit for the first three innings and holding a 2-0 lead, Cubs starter Rich Harden gave up a leadoff double to Berkman. One out later, Miguel Tejada hit an RBI double and scored on Geoff Blum's single.
Then on a 1-2 pitch, Rodriguez launched a two-run homer into the center-field basket to put the Astros ahead 4-2. It was his 293rd homer as a catcher, good for seventh all-time.
"Three hundred home runs on the major league level is an accomplishment, especially for a catcher," Rodriguez said. "For a guy like me, I'm not too tall at 5-10, and to be able to hit 300 home runs on the major league level. But it's good. It's just hard work. I'm a very hard worker every day. Things like this pay off."
Harden (4-2) was tagged for the most runs in an innings since he gave up five in the second inning against the Angels on Aug. 9, 2005, when he was pitching for Oakland.
"I am not pitching anywhere I'm capable of. [I] expect more out of myself," said Harden, who has a 4.74 ERA.
The Astros added two runs in the seventh. Cubs reliever Jose Ascanio hit the first two batters in the inning and Berkman followed with an RBI single. Michael Bourn scored on Ascanio's wild pitch to give the Astros a 6-3 lead.
Soriano led off the third inning with a single and scored from first on Ryan Theriot's double. After Kosuke Fukudome singled, Lee drove Moehler's pitch to the left-center wall for a double to score Theriot.
"I felt good to get some hits. My swing felt a little better today. I had a little better timing so it is something I can build on," said Lee, who came in the game hitting .198.
Moehler gave up a solo shot to Lee in the fifth inning. He allowed three runs on five hits. He struck out four and walked two and hit a batter.
Harden, who had won his four previous decisions, gave up four runs and six hits. He had seven strikeouts and walked three.
"The big thing for me is just being consistent and throwing my off-speed for strikes. Those are the kind of pitches that have been hurting me," Harden said.
Cubs RHP Carlos Zambrano allowed four runs on five hits over 3 2/3 innings in rehab start for Daytona on Sunday. Zambrano is on the DL with a strained hamstring. He is scheduled to start on Friday at San Diego. Cubs manager Lou Piniella said he will talk to Zambrano to see how he feels. ... A day after closer Kevin Gregg gave up a four-run lead in the ninth, Piniella said Gregg's job is safe, "Barring an injury we're going to stay the way we are."